<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>L2 en Español</title>
        <link>https://paragraph.com/@layer2es</link>
        <description>Comunidad dedicada al estudio de soluciones de escalabilidad en Ethereum.
Impulsado y administrado por DeFi para Principiantes y SEED Latam.</description>
        <lastBuildDate>Tue, 25 Aug 2026 04:21:06 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>L2 en Español</title>
            <url>https://storage.googleapis.com/papyrus_images/d5006a754c728c485c8fdd5abf4b5979b9c79642ddc84b1bb2751b218891c86d.jpg</url>
            <link>https://paragraph.com/@layer2es</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[Arquitectura detrás del Puente de Scroll]]></title>
            <link>https://paragraph.com/@layer2es/arquitectura-detr-s-del-puente-de-scroll</link>
            <guid>wUa4n6EIqB9oZKVjrxjB</guid>
            <pubDate>Wed, 01 Nov 2023 01:26:04 GMT</pubDate>
            <description><![CDATA[🔷IntroducciónEn el ecosistema Web3, la función de un bridge (aka puente) puede parecer sencilla a primera vista: facilitar la transferencia de tokens de una cadena a otra. Sin embargo, la realidad es mucho más intrigante y compleja. En su esencia, los bridges son el medio en el que se transmiten mensajes, como por ejemplo, un mensaje que implica la congelación del activo que deseas transferir a una blockchain y, como resultado, emiten tokens equivalentes en la cadena de destino. Estos tokens...]]></description>
            <content:encoded><![CDATA[<h2 id="h-introduccion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>🔷Introducción</strong></h2><p>En el ecosistema Web3, la función de un bridge (<em>aka puente)</em> puede parecer sencilla a primera vista: <strong>facilitar</strong> la transferencia de tokens de una cadena a otra. Sin embargo, la realidad es mucho más intrigante y compleja. En su esencia, los bridges son el medio en el que <strong>se transmiten</strong> <strong>mensajes</strong>, como por ejemplo, un mensaje que implica la congelación del activo que deseas transferir a una <em>blockchain</em> y, como resultado, emiten tokens equivalentes en la cadena de destino. Estos <em>tokens</em> equivalentes, a menudo denominados &quot;envueltos&quot; o &quot;<em>wrapped</em>,&quot; representan la criptomoneda o el token original, pero cuentan con la versatilidad de circular y utilizarse en diferentes <em>blockchains</em>. Por ejemplo, cuando deseas transferir Ethereum a la <em>blockchain</em> de Scroll, el <em>bridge</em> se encarga de inmovilizar el Ethereum original y, a cambio, emite <em>tokens</em> equivalentes en <em>blockchain</em> de Scroll.</p><p>En este artículo, nos sumergiremos en la forma en que Scroll <strong>aprovecha</strong> el poder de su <em>bridge</em> para facilitar la transferencia de activos entre L1 y L2 (capas 1 y 2) y viceversa. Además, exploraremos las implicaciones y las características únicas que distinguen a Scroll en este aspecto.</p><hr><h2 id="h-indice" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">📝Índice</h2><ol><li><p><strong>Mensajes entre Dominios L1 y L2.</strong></p><ol><li><p><em>Envío de mensajes de L1 a L2.</em></p></li><li><p><em>Proceso de Envío de Mensajes y Transacciones.</em></p></li><li><p><em>Envío de Mensajes Arbitrarios.</em></p></li><li><p><em>Envío de Transacciones Forzadas.</em></p></li><li><p><em>Reintento de Mensajes Fallidos.</em></p></li><li><p><em>Tarifa de Retransmisión de Mensajes.</em></p></li><li><p><em>Alias de Dirección.</em></p></li><li><p><em>Envío de mensajes de L2 a L1.</em></p></li><li><p><em>Withdraw Trie.</em></p></li></ol></li><li><p><strong>Gateways de tokens.</strong></p><ol><li><p><em>Gateways de depósito</em></p><ol><li><p><strong><em>Caso 1: Deposito de ETH.</em></strong></p></li><li><p><strong><em>Caso 2: Depositos de tokens ERC-20 Stardard / Custom ERC-20 / WETH.</em></strong></p></li><li><p><strong><em>Caso 3: Deposito de tokens ERC-721/ERC-1155.</em></strong></p></li></ol></li><li><p><em>Gateways de Retiro.</em></p><ol><li><p><strong><em>Caso 1: Retiro de ETH.</em></strong></p></li><li><p><strong><em>Caso 2: Retiro de tokens ERC-20/Custom tokens/WETH.</em></strong></p></li><li><p><strong><em>Caso 3: Deposito de tokens ERC-721/ERC-1155.</em></strong></p></li></ol></li></ol></li><li><p><strong>Conclusión.</strong></p></li><li><p><strong>Glosario.</strong></p></li></ol><hr><h2 id="h-1mensajes-entre-dominios-l1-y-l2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>1.🤝Mensajes entre Dominios L1 y L2</strong></h2><p>En Scroll los usuarios tienen la posibilidad de usar un puente para mensajes arbitrarios que permite la transferencia de tokens y a su vez deja a las que dapps puedan comunicarse entre L1 y L2. Por consecuencia, esto significa que una Dapps en L1 puede activar funciones de un contrato en L2 y viceversa.</p><h3 id="h-11-envio-de-mensajes-de-l1-a-l2" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>1.1 Envío de mensajes de L1 a L2</strong></h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e7e4f2ffdad562c7c977d1a3edf3a89f40760e8d5def467dcc022a121abfb774.png" alt="Figura 1. https://docs.scroll.io/en/technology/bridge/cross-domain-messaging/" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Figura 1. https://docs.scroll.io/en/technology/bridge/cross-domain-messaging/</figcaption></figure><p>Tal como se observa en la figura, existen dos enfoques principales a la hora de interactuar desde L1 a L2: el envío de mensajes arbitrarios a través de <code>Scroll Messenger de L1</code> (o <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scrollscan.com/address/0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367#events"><strong><em>L1ScrollMessenger</em></strong></a><strong>)</strong> y el envío de transacciones forzadas mediante la <code>Gateway para transacciones forzadas</code> (o <strong><em>EnforcedTxGateway</em>)</strong>. Ambos métodos permiten a los usuarios iniciar una transacción desde L1 a L2  o interactuar con contratos desplegados en L2 desde L1.</p><p>Para los mensajes arbitrarios, el sender en L2 es la dirección del <code>Scroll Messenger de L1</code> con alias. Por otro lado, para las transacciones forzadas, el <em>sender</em> (o remitente en español) en L2 es una <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethereum.stackexchange.com/questions/5828/what-is-an-eoa-account">cuenta de propiedad externa</a> (<strong>EOA</strong>). Además, se proporcionan varias <em>Gateways</em> para facilitar el depósito de ETH y conocidos estándares de tokens, tales como <strong>ERC-20</strong>, <strong>ERC-677</strong>, <strong>ERC-721</strong> y <strong>ERC-1155</strong>.</p><h3 id="h-12-proceso-de-envio-de-mensajes-y-transacciones" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>1.2 Proceso de Envío de Mensajes y Transacciones</strong></h3><p>En la Figura 1, tanto los mensajes arbitrarios como las transacciones forzadas se agregan a la cola de mensajes en el contrato <code>Message Queue de L1</code> (o <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scrollscan.com/address/0x5300000000000000000000000000000000000000"><strong><em>L1MessageQueue</em></strong></a><strong><em>)</em></strong>. Este contrato ofrece dos funciones clave: <code>appendCrossDomainMessage</code> y <code>appendEnforcedTransaction</code> para agregar mensajes arbitrarios y transacciones forzadas, respectivamente.</p><ul><li><p><code>appendCrossDomainMessage</code>: permite agregar mensajes iniciados por L1, utilizando la dirección de alias de <code>Scroll Messenger de L1</code> como <em>sender</em>.</p></li><li><p><code>appendEnforcedTransaction</code> solo puede ser llamada por <code>EnforcedTxGateway</code> y utiliza el <em>sender</em> especificado en el parámetro de función como remitente de la transacción. Esto permite a los usuarios ejecutar un retiro o transferencia de ETH desde sus cuentas L2 directamente a través del <em>bridge</em> L1.</p></li></ul><p>Después de que una transacción se ejecute con éxito en L1, el <em>watcher</em> en el secuenciador de Scroll monitorea el contrato <code>Message Queue de L1</code> y recopila nuevos eventos llamados <code>QueueTransaction</code>. Estos eventos son utilizados por el secuenciador para construir una nueva transacción <code>L1MessageTx</code>, que luego se agrega a su cola de transacciones L1 local.</p><p>Las transacciones <code>L1MessageTx</code> siempre aparecen primero en los bloques L2, seguidas de las transacciones L2.</p><h3 id="h-13-envio-de-mensajes-arbitrarios" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>1.3 Envío de Mensajes Arbitrarios</strong></h3><p>La dirección del contrato <code>Scroll Messenger de L1</code> proporciona <strong>dos</strong> funciones <code>sendMessage</code> para enviar mensajes arbitrarios. La diferencia principal entre ellas es que la segunda permite a los usuarios <strong>especificar</strong> una dirección de reembolso para recibir el exceso de gas.</p><p>A nivel de código las <strong>2</strong> funciones se ven de la siguiente manera:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b94c48fb7e69ee9fa7bb4f337afa8f57eea37c274a8ae3bb598cbedcd9657da4.png" alt="Figura 2. https://docs.scroll.io/en/technology/bridge/cross-domain-messaging/" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Figura 2. https://docs.scroll.io/en/technology/bridge/cross-domain-messaging/</figcaption></figure><p>Ambas funciones requieren que los usuarios proporcionen un límite de gas y paguen el fee de retransmisión por adelantado en L1. Los detalles se codifican en un mensaje entre dominios, y luego se utilizan como datos de llamada en la transacción <code>L1MessageTx</code> en L2.</p><h3 id="h-14-envio-de-transacciones-forzadas" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>1.4 Envío de Transacciones Forzadas</strong></h3><p>El contrato <code>EnforcedTxGateway</code> ofrece <strong>dos</strong> funciones <code>sendTransaction</code> para enviar transacciones forzadas. La diferencia clave radica en <strong>quién es</strong> el remitente de la transacción en L2: el remitente de la transacción o la dirección especificada. Esto permite a un tercero enviar una transacción forzada <strong>en nombre del usuario</strong> y pagar la tasa de retransmisión. Tenga en cuenta que la segunda función requiere proporcionar una <strong>firma válida</strong> de la transacción <code>L1MessageTx</code> generada que coincida con la dirección del remitente.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fe873de3217a72a9ea9802a02f9b18d940df9196d74dd13f6a5a71b9c7e4520f.png" alt="Figura 3. https://docs.scroll.io/en/technology/bridge/cross-domain-messaging/" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Figura 3. https://docs.scroll.io/en/technology/bridge/cross-domain-messaging/</figcaption></figure><p>Ambas funciones exigen que el remitente sea una cuenta <strong>EOA</strong> y la tarifa de retransmisión se deduzca de la cuenta L1. El valor pasado a la función indica la cantidad de ETH que se transferirá desde la cuenta del remitente en L2, no en L1.</p><h3 id="h-15-reintento-de-mensajes-fallidos" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>1.5 Reintento de Mensajes Fallidos</strong></h3><p>Si una transacción <code>L1MessageTx</code> falla en L2 debido a la falta de gas, los usuarios pueden reintentar con un límite de gas más alto utilizando la función <code>replayMessage</code> del contrato <code>Scroll Messenger de L1</code>. Este mensaje se convertirá en un nuevo <code>L1MessageTx</code> en L2. Tenga en cuenta que <strong>no se reembolsará</strong> la tarifa del gas por la transacción fallida anterior, por que ya está procesada en L2.</p><h3 id="h-16-tarifa-de-retransmision-de-mensajes" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>1.6 Tarifa de Retransmisión de Mensajes</strong></h3><p>La tarifa de retransmisión de mensajes L1 a L2 se calcula en función del <strong>límite de gas</strong> y se almacena en la dirección del contrato <code>L2GasPriceOracle</code> (o <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scrollscan.com/address/0x987e300fdfb06093859358522a79098848c33852"><strong><em>Oráculo de gas en L2</em></strong></a>) Esta tarifa se deduce de la cuenta L1 y es igual a <code>gasLimit * l2BaseFee</code>.</p><h3 id="h-17-alias-de-direccion" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>1.7 Alias de Dirección</strong></h3><p>Debido al comportamiento del opcode <code>CREATE</code>, es posible que alguien despliegue un contrato en la misma dirección en L1 y L2 pero con diferente bytecode. Para evitar que usuarios malintencionados se aprovechen de esto, el <em>bridge</em> aplica un alias de dirección cuando el emisor del mensaje es un contrato en L1. La dirección del remitente alias de la transacción del mensaje en L1 es <code>l1_contract_address + offset</code>, donde el <em>offset</em> es <code>0x1111000000000000000000000000000000001111</code>.</p><h3 id="h-18-envio-de-mensajes-de-l2-a-l1" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>1.8 Envío de mensajes de L2 a L1</strong></h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4b1e867cc8a40ebe21f071a25334c1abea0078f8abb9b3226490ccce74863e8a.png" alt="Figura 4. https://docs.scroll.io/en/technology/bridge/cross-domain-messaging/" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Figura 4. https://docs.scroll.io/en/technology/bridge/cross-domain-messaging/</figcaption></figure><p>En la Capa 2 (L2), los usuarios tienen la capacidad de enviar mensajes arbitrarios utilizando el <code>Scroll Messenger de L2</code> (o <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scrollscan.com/address/0x781e90f1c8fc4611c9b7497c3b47f99ef6969cbc"><strong><em>L2ScrollMessenger</em></strong></a>) para facilitar la retirada de tokens e interactuar con los contratos desplegados en la Capa 1 (L1). Al igual que en L1, Scroll ha desarrollado diversas <em>Gateways</em> de <em>Tokens</em> estándar para simplificar el proceso de inicio de retiros.</p><p>Adicionalmente, el contrato<code>Scroll Messenger de L2</code> incluye una función denominada <code>sendMessage</code>. Es importante destacar que esta función difiere de <code>L1ScrollMessenger.sendMessage</code>, ya que no toma en cuenta el parámetro <code>gasLimit</code>. Esto se debe a que, al iniciarse la transacción de ejecución para el retiro en L1, las comisiones de transacción se pagan directamente en L1.</p><p>Como resultado, la función <code>sendMessage</code> requiere que la función <code>msg.value</code> <strong>coincida</strong> con el <code>value</code> especificado en el parámetro. La función codifica los argumentos en un mensaje entre dominios siguiendo el mismo esquema que utiliza <code>Scroll Messenger de L1</code>.</p><p>A nivel de código, se veria de la siguiente manera:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7098f1d600f20d8f0f692d42c3163a93fc3743e50cfbfb48018ec69e1e92958e.png" alt="Figura 5. https://docs.scroll.io/en/technology/bridge/cross-domain-messaging/" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Figura 5. https://docs.scroll.io/en/technology/bridge/cross-domain-messaging/</figcaption></figure><p>Luego, se agrega el <em>hash</em> del mensaje entre dominios a <code>Message Queue de L2</code> (o <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://0x5300000000000000000000000000000000000000"><strong><em>L2MessageQueue</em></strong></a><strong><em>)</em></strong>, usando la función <code>appendMessage</code>. El contrato <code>Message Queue de L2</code>  se encarga del <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.scroll.io/en/technology/bridge/cross-domain-messaging/#withdraw-trie"><strong><em>Withdraw Trie</em></strong></a>, que es un <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://wiki.lemon.me/blockchain/que-es-un-merkle-tree/#:~:text=Un%20merkle%20tree%20es%20una%20estructura%20de%20datos%20utilizada%20en,de%20la%20base%20de%20datos."><strong><em>Merkle tree</em></strong></a> diseñado para almacenar los mensajes nuevos del <code>Message Queue de L2</code><strong><em>.</em></strong> Cada vez que un nuevo mensaje es agregado a la cola, el contrato lo inserta dentro del <em>withdraw trie</em> y actualiza la <em>root</em> <em>hash</em> del <em>trie</em>.</p><p>Luego de que un lote de transacciones que contienen mensajes de L2 a L1 es finalizado en el contrato <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scrollscan.com/address/0xa13BAF47339d63B743e7Da8741db5456DAc1E556"><strong><em>rollup L1</em></strong></a>, usuarios deben enviar las transacciones de ejecución de retiro para poder llamar a la función <code>relayMessageWithProof</code> en el contrato <code>Scroll Messenger de L1</code> para poder ejecutar el retiro en L1. Gracias a las <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://medium.com/crypto-0-nite/merkle-proofs-explained-6dd429623dc5">Pruebas Merkle</a>, la finalización de las transacciones de reto es confiable y puede ser presentada por los <strong>propios usuarios</strong> o por un <strong>tercero en nombre de ellos</strong>.</p><p>Para simplificar el proceso de crear un “<strong>MIP”</strong> de Retiro (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.derpturkey.com/merkle-tree-construction-and-proof-of-inclusion/">Prueba de Inclusión de Merkle</a>) para Scroll, se tiene un servicio llamado <strong>Bridge History API</strong>. Esta API monitorea los eventos <code>SentMessage</code> generados por <code>Scroll Messenger de L2</code> y <strong>mantiene</strong> un <em>Trie</em> de Retiros interno. <strong>Genera</strong> activamente pruebas de <em>Merkle</em> para todos los mensajes de retiro, asegurando una experiencia sin problemas para los usuarios y los servicios de terceros. Esto significa que <strong>cualquier persona</strong>, ya sea un usuario o un servicio de terceros, puede <strong>solicitar</strong> fácilmente pruebas de <em>Merkle</em> del <strong>Bridge History API</strong> para incluirlas en sus transacciones de Ejecución de Retiro.</p><p>Es importante destacar que estas transacciones de Ejecución de Retiro pueden ser iniciadas tanto por los <strong>propios usuarios</strong> como por <strong>servicios de terceros</strong>, lo que proporciona flexibilidad en la forma en que se procesan los retiros.</p><h3 id="h-19-withdraw-trie" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>1.9 Withdraw Trie</strong></h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a299c83cfc164187558977339b5a877e925c8bcb26cb702f40e28fdc7b851781.png" alt="Figura 6. https://docs.scroll.io/en/technology/bridge/cross-domain-messaging/#withdraw-trie" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Figura 6. https://docs.scroll.io/en/technology/bridge/cross-domain-messaging/#withdraw-trie</figcaption></figure><p>El <em>Withdraw Trie</em> es un <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://wiki.lemon.me/blockchain/que-es-un-merkle-tree/#:~:text=Un%20merkle%20tree%20es%20una%20estructura%20de%20datos%20utilizada%20en,de%20la%20base%20de%20datos."><strong>árbol de Merkle</strong></a><strong> binario compacto</strong>. En esta estructura, el <em>hash</em> de cada <strong>nodo hoja</strong> se deriva directamente del <em>hash</em> del mensaje, mientras que el <em>hash</em> de un <strong>nodo no hoja</strong> se calcula utilizando el resumen de <em>hash</em> de <em>Keccak</em> de los <em>hashes</em> concatenados de sus dos nodos hijos. La profundidad del <em>Withdraw Trie</em> se expande de manera dinámica según la cantidad de mensajes agregados al <em>trie</em>.</p><p>Por ejemplo la <strong>figura 6</strong> muestra un ejemplo de un <em>Trie</em> de Retiros completo de 3 capas.</p><p>Sin embargo,  existen casos en donde la cantidad de hojas <strong>no llena</strong> un árbol binario completo, por ellos se utilizan <em>hashes</em> de valor <strong>0</strong> para rellenar los nodos hoja, como se muestra a continuación:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fb1ee3ff339b6a88d89814d0cd0cae110e3703217b2fdb7e9d4c892f93bc1f37.png" alt="Figura 7. https://docs.scroll.io/en/technology/bridge/cross-domain-messaging/#withdraw-trie" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Figura 7. https://docs.scroll.io/en/technology/bridge/cross-domain-messaging/#withdraw-trie</figcaption></figure><p>Luego, cuando llega un nuevo mensaje, este se agrega a un Trie de Retiros incompleto <strong>reemplazando</strong> el <em>hash</em> de valor <strong>0</strong> por el nuevo <em>hash</em> para el nodo hoja.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/76f4d5b487bf22e923e94b8d9d4e682f8e3fe557edee6c4710d9b0302e1af9b9.png" alt="Figura 8. https://docs.scroll.io/en/technology/bridge/cross-domain-messaging/#withdraw-trie" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Figura 8. https://docs.scroll.io/en/technology/bridge/cross-domain-messaging/#withdraw-trie</figcaption></figure><p>De esa forma el arbol va <strong>creciendo</strong> y <strong>agregando</strong> nuevos <em>hashes</em> ceros que <strong>seran reemplazados</strong> por los <em>hashes</em> de las solicitudes de retiro que vayan realizandose en la <em>chain</em>.</p><hr><h2 id="h-2-gateways-de-tokens" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>2. 🚪Gateways de tokens</strong></h2><p>Cuando un activo, ya sea, un <em>token</em>, un NFT o simplemente ETH, es depositado o retirado en Scroll, debe pasar por una serie de pasos previos para garantizar una correcta ejecución en Scroll.</p><p>Para manejar esto, se crearon una serie de “<strong><em>Gateways</em></strong>”, las cuales son utilizadas para cada tipo de activo que busque transferir entre las cadenas de Scroll y Ethereum. Para cada tipo de activo, existe una <em>gateway</em> especifica, por lo que se necesita guiar a estos activos por la <em>gateway</em> adecuada, este trabajo es responsabilidad del <strong><em>Gateway Router</em></strong> el cual revisa y selecciona el mapeo correspondiente para cada activo que se deposita o retira de Scroll.</p><h3 id="h-21-gateways-de-deposito" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>2.1 Gateways de depósito</strong></h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8a4bbcbaa8ca14ca6799b00ec83cdf42768365a6bc0b70f719aebe9d5f0e09e1.png" alt="Figura 9. https://docs.scroll.io/en/technology/bridge/deposit-gateways/" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Figura 9. https://docs.scroll.io/en/technology/bridge/deposit-gateways/</figcaption></figure><p>Tal como se puede apreciar en la <strong>figura 9</strong>, a la hora de depositar fondos en Scroll, el usuario necesita enviar la solicitud de deposito al <code>Gateway Router de L1</code>(o <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scrollscan.com/address/0xF8B1378579659D8F7EE5f3C929c2f3E332E41Fd6"><strong><em>L1GatewayRouter</em></strong></a>), el cual seleccionará la <em>gateway</em> adecuada dependiendo el tipo de activo a depositar. Es importante descatar que para los token de tipo <strong>ERC-721</strong> o <strong>ERC-1155</strong> no es necesario realizar una llamada al <em>router</em>, ya que Scroll ha configurado <em>gateways</em> especiales para este tipo de activos no fungibles.</p><p>Luego de seleccionar la <em>gateway</em> adecuada, esta crea un mensaje codificado que recibe el <code>Scroll Messenger de L1</code>, este mensaje es agregado a una fila de mensajes (<code>Message Queue de L1</code>) que son almacenados para ser escogidos por el secuenciador para ser agregados a la <em>chain</em> de Scroll.</p><p>El proceso es bastante simple, sin embargo, dependiendo del tipo de activo que se vaya a depositar pueden existir algunas diferencias.</p><h4 id="h-caso-1-deposito-de-eth" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0"><strong>Caso 1: Deposito de ETH</strong></h4><p>Para Scroll, <strong>ETH</strong> es la <strong>moneda nativa</strong> para pagar las comisiones de la <em>chain</em>, por ello</p><p>existe una gran cantidad de ETH en el contrato del <code>Scroll Messenger de L2</code> para que los usuarios puedan depositar en L1 y retirar en L2 <strong>sin la necesidad</strong> de emitir nuevos tokens.</p><p>El proceso es simple:</p><ol><li><p>Primero se llama al contrato <code>Gateway Router de L1</code>.</p></li><li><p>Luego se selecciona la <code>Gateway de ETH de L1</code> y se codifica el mensaje.</p></li><li><p>El contrato <code>Scroll Messenger de L1</code> recibe este mensaje codificado y lo agrega al contrato de <code>Message Queue de L1</code>.</p></li><li><p>Despues que la transacción finalize en L1, el secuenciador incluira una transacción en un bloque en L2.</p></li><li><p>Esta transacción en L2 llamara a la función <code>L2ScrollMessenger.relayMessage</code> que  a su vez llama a <code>L2ETHGateway.finalizeDepositETH</code> del contrato de la <code>Gateway L2 de ETH</code>(o <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scrollscan.com/address/0x6EA73e05AdC79974B931123675ea8F78FfdacDF0"><strong><em>L2ETHGateway</em></strong></a>) y de esa forma, finaliza el depósito en L2.</p></li></ol><h4 id="h-caso-2-depositos-de-tokens-erc-20-stardard-custom-erc-20-weth" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0"><strong>Caso 2: Depositos de tokens ERC-20 Stardard / Custom ERC-20 / WETH</strong></h4><p>Antes de avanzar es importante mencionar que al igual que para el deposito de ETH, lo primero que se debe hacer es llamar al contrato <code>Gateway Router de L1</code>, luego base al <em>mapping</em> se seleccionara la <em>Gateway</em> correspondiente dependiendo si es un <em>token</em> <strong>ERC20</strong>, <strong>WETH</strong> o un <strong>Custom token</strong>. Esto es igual para estos 3 tipos de <em>tokens</em>.</p><p><strong>Para los tokens ERC-20 Standard:</strong></p><ol><li><p>La <code>Gateway L1 de ERC20 Standard</code>(o <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scrollscan.com/address/0xD8A791fE2bE73eb6E6cF1eb0cb3F36adC9B3F8f9"><strong><em>L1StandardERC20Gateway</em></strong></a>) bloquea los <em>tokens</em> ERC-20 en L1 que seran depositados.</p></li><li><p>Si es la primera vez que el <em>token</em> ERC-20 se deposita, la <code>Gateway L1 de ERC20 Standard</code> computa una dirección para L2 y agrega toda la <em>metadata</em> del <em>token</em> (nombre, simbolo y decimales) en un mensaje  para la “posible” creación de un nuevo contracto en L2.</p></li><li><p>En caso de que el <em>token</em> ERC-20 que se deposita ya tenga creada un dirección de contrato en L2 almacenada en <code>tokenMapping</code>, la <code>Gateway L1 de ERC20 Standard</code> directamente tomará esta dirección de contrato para emitir nuevos <em>tokens</em> en L2.</p></li><li><p>Luego de esto la <code>Gateway L1 de ERC20 Standard</code> crea el mensaje codificado y lo envia al <code>Scroll Messenger de L1</code>. Este a su vez lo incluye al contrato de <code>Message Queue de L1</code>.</p></li><li><p>Ahora el secuenciador toma la transacción del contrato de <code>Message Queue de L1</code> y la agrega en un bloque en L2. Esta transaccíon llama a la función <code>L2ScrollMessenger.relayMessage</code> que a su vez llama a <code>L2StandardERC20Gateway.finalizeDepositERC20</code> de la <code>Gateway L2 de ERC20 Standard</code>(o <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scrollscan.com/address/0xE2b4795039517653c5Ae8C2A9BFdd783b48f447A"><strong><em>L2StandardERC20Gateway</em></strong></a>) para finalizar el depósito en L2.</p></li><li><p>En el caso de que el <em>token</em> ERC-20 a depositar no tenga una direccion de contrato en L2, la <code>Gateway L2 de ERC20 Standard</code>, extraerá la <em>metadata</em> construida en el <strong>paso 2</strong> y llamara a la función  <code>ScrollStandardERC20Factory</code> para crear una nueva dirección de contrato en L2.</p></li><li><p>La misma <code>Gateway L2 de ERC20 Standard</code> se encarga de usar la función <code>mint</code> para emitir nuevos <em>tokens</em> y se los enviara la dirección de destino.</p></li></ol><p><strong>Para custom ERC-20 tokens:</strong></p><ol><li><p>La <code>Gateway L1 de Custom ERC20 tokens</code>(o <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scrollscan.com/address/0xb2b10a289A229415a124EFDeF310C10cb004B6ff"><strong><em>L1CustomERC20Gateway</em></strong></a>) bloquea los <em>tokens</em> en L1 que seran depositados.</p></li><li><p>La <code>Gateway L1 de Custom ERC20 tokens</code> requiere una dirección de <em>token</em> ERC20 L2 presente en <code>tokenMapping</code>. Esta función recupera la dirección de <em>token</em> ERC20 correspondiente, codifica el mensaje de depósito de <em>token</em> y lo reenvía a <code>Scroll Messenger de L1</code><strong>.</strong> Este a su vez lo incluye al contrato de <code>Message Queue de L1</code>.</p></li><li><p>Ahora el secuenciador toma la transacción del contrato de <code>Message Queue de L1</code> y la agrega en un bloque en L2</p></li><li><p>Esta transacción llama a <code>L2ScrollMessenger.relayMessage</code> que a su vez llama a <code>L2CustomERC20Gateway.finalizeDepositERC20</code> de la <code>Gateway L2 de Custom ERC20 tokens</code>(o <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scrollscan.com/address/0x64CCBE37c9A82D85A1F2E74649b7A42923067988"><strong><em>L2CustomERC20Gateway</em></strong></a>) para finalizar el depósito.</p></li></ol><p>Es importante destacar que la <code>Gateway L2 de Custom ERC20 tokens</code> llamara a la función <code>mint</code> del contrato del <em>custom token</em> en L2, por lo que este último debera concederle permisos para emitir tokens al contrato de la <code>Gateway L2 de Custom ERC20 tokens</code><strong>.</strong></p><p><strong>Para WETH:</strong></p><ol><li><p>La <code>Gateway L1 de WETH</code>(o <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://0x7AC440cAe8EB6328de4fA621163a792c1EA9D4fE"><strong><em>L1WETHGateway</em></strong></a>) bloquea los tokens en L1 que seran depositados transfiriendo del remitente a sí mismo y “<strong>desenvolviendo el WETH</strong>”, es decir convertiendo el token de <strong>WETH</strong> a <strong>ETH nativo</strong>.</p></li><li><p>Luego, este token ETH nativo y <code>msg.value</code> se envian juntos al mediante un mensaje codificado que se le envia a <code>Scroll Messenger de L1</code><strong>.</strong> Este último, lo incluye al contrato de <code>Message Queue de L1</code><strong>.</strong></p></li><li><p>Ahora el secuenciador toma la transacción del contrato de <code>Message Queue de L1</code> y la agrega en un bloque en L2</p></li><li><p>La transacción L2 correspondiente llama a la función <code>L2ScrollMessenger.relayMessage</code> que a su vez llama a <code>L2WETHGateway.finalizeDepositERC20</code> de la <code>Gateway L2 de WETH</code>(o <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scrollscan.com/address/0x7003E7B7186f0E6601203b99F7B8DECBfA391cf9"><strong><em>L2WETHGateway</em></strong></a>) para finalizar el depósito.</p></li><li><p>Una vez realizado esto la <code>Gateway L2 de WETH</code> vuelve a “<strong>envolver</strong>” de nuevo el token <strong>ETH</strong> depositado en L2, lo convierte a <strong>WETH</strong> y lo transfiere a la dirección del destinatario en L2.</p></li></ol><h4 id="h-caso-3-deposito-de-tokens-erc-721erc-1155" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0"><strong>Caso 3: Deposito de tokens ERC-721/ERC-1155</strong></h4><p>El depósito de este tipo de tokens funciona de manera similar a los tokens de tipo <strong>ERC-20</strong>, sin embargo, tal y como se muestra en la <strong>figura 9</strong>, los usuarios pueden acceder a las <code>Gateways L1 de ERC-721/ERC-1155</code> directamente sin la necesidad de depender de la <code>Gateway Router de L1</code><strong>.</strong></p><p>Con el objetivo de facilitar el deposito de tokens <strong>ERC-721</strong> o <strong>ERC-1155</strong>, la <code>Gateway L1 de ERC721</code> y la <code>Gateway L1 de ERC1155</code> tienen implementadas una función que permite depositar por lotes (o <em>batches</em>) varios tokens al mismo tiempo.</p><p>Para la finalización del depósito se utilizan la <code>Gateway L2 de ERC721</code> y la <code>Gateway L2 de ERC1155</code>, con los mismo comandos como en el caso de un ERC-20.</p><h3 id="h-22-gateways-de-retiro" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>2.2 Gateways de Retiro</strong></h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/731d66c15fdd0c4bc6d043ac89e3e47b9ee02ea6cf8ee512dbc854c0e87bce0b.png" alt="Figura 10. https://docs.scroll.io/en/technology/bridge/withdraw-gateways/" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Figura 10. https://docs.scroll.io/en/technology/bridge/withdraw-gateways/</figcaption></figure><p>La <strong>figura 10</strong> muestra el flujo de trabajo desde L2 a L1 en donde los usuarios pueden llamar a las diferentes <em>Gateways</em> disponibles para iniciar el retiro de fondos. El retiro de fondo se codifica en un mensaje que recibe el <code>Scroll Messenger de L2</code>(o y que luego es agregado al <code>Message Queue de L2</code>. Este último componente mantiene una <strong><em>Withdraw Trie root</em></strong> que es actualizado cada vez que un nuevo mensaje es incluido.</p><p>La <strong><em>Withdraw Trie root</em></strong> final, junto con la <em>state root</em> del estado L2, se confirma en el contrato de <strong>rollup de L1</strong>. Una vez que la nueva Withdraw Trie root se finaliza en L1, los usuarios o terceros pueden generar una <strong>Prueba de Inclusión Merkle válida</strong> para la <em>Withdraw Trie root</em> y ejecutar una transacción de retiro en L1.</p><p>Al igual que para los depósitos, el proceso para los retiros puede variar dependiendo del tipo de activo que se vaya a retirar.</p><h4 id="h-caso-1-retiro-de-eth" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0"><strong>Caso 1: Retiro de ETH</strong></h4><ol><li><p>Se llama a la <code>Gateway Router de L2</code>, luego se secciona la <em>Gateway</em> adecuada (en este caso la <code>Gateway L2 de ETH</code>).</p></li><li><p>La <code>Gateway L2 de ETH</code> crea el mensaje codificado y lo envia al <code>Scroll Messenger de L2</code><strong>,</strong> el cual bloquea el ETH a retirar en su contrato. Luego, este último agrega un mensaje al <code>Message Queue de L2</code><strong>.</strong></p></li><li><p>La ejecución de la transaccion de retiro en L1 llama a la función <code>L1ScrollMessenger.relayMessageWithProof</code> para finalizar el retiro. En el caso de retiro de ETH la función <code>relayMessageWithProof</code> llama a la función <code>L1ETHGateway.finalizeWithdrawETH</code>  y envia el ETH a la dirección del destinatario en L1.</p></li></ol><h4 id="h-caso-2-retiro-de-tokens-erc-20custom-tokensweth" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0"><strong>Caso 2: Retiro de tokens ERC-20/Custom tokens/WETH</strong></h4><p>Para este caso lo primero que se hace es llamar al contrato de la <code>Gateway Router de L2</code> el cual llamará a la <em>Gateway</em> correspondiente.</p><p><strong>Para ERC-20 Standard y Custom ERC-20tokens:</strong></p><ol><li><p>La <code>Gateway Router de L2</code> llama a la Gateway correspondiente segun activo (sea <strong>ERC20 Standard</strong> o <strong>Custom ERC20</strong>)</p></li><li><p>Los contratos de las <em>Gateways</em> L2 de <strong>ERC20 Standard</strong> o <strong>Custom ERC20</strong> queman, según el activo, la cantidad de <em>token</em> ERC20 a retirar y al mismo tiempo generan un mensaje codificado, el cual es enviado al <code>Scroll Messenger de L2</code>.</p></li><li><p>La ejecución del retiro en L1 llama a la función <code>L1ScrollMessenger.relayMessageWithProof</code> para finalizar el retiro en L1. En el caso de un <em>token</em> ERC20 Standard o Custom, la transacción llama a la función <code>finalizeWithdrawERC20</code> de <code>Gateway L1 de ERC20 Standard</code> o <code>L1CustomERC20Gateway</code> respectivamente.</p></li><li><p>En el contrato de <code>Gateway L1 de ERC20 Standard</code>, si se trata de la primera transacción de retirada de un token ERC20, la función <code>finalizeWithdrawERC20</code> actualizará la <em>mapping</em> de la dirección del <em>token</em> L1 a su dirección del <em>token</em> L2 en el <strong>tokenMapping</strong>.</p></li><li><p>Finalmente, la <code>Gateway L1 de ERC20 Standard</code> libera los <em>tokens</em> ERC20 bloqueados transfiriéndolos desde sí misma a la dirección del destinatario en L1.</p></li></ol><p><strong>Para WETH:</strong></p><ol><li><p>La <code>Gateway Router de L2</code> llama a la <strong><em>Gateway L2 de WETH</em>.</strong></p></li><li><p>Luego, la <strong><em>Gateway L2 de WETH</em></strong> se transfiere los <strong>WETH</strong> asi mismo y los “<strong>desenvuelve</strong>” convirtiendolos en <strong>ETH nativo</strong> que son transferidos al <code>Scroll messenger de L2</code> junto con un mensaje codificado.</p></li><li><p>La ejecución del retiro en L1 llama a la función <code>L1ScrollMessenger.relayMessageWithProof</code> para finalizar el retiro en L1. Para el caso de WETH, la transacción llama a <code>L1WETHGateway.finalizeWithdrawERC20</code> y envia este monto en ETH a la <code>Gateway L1 de WETH</code>.</p></li><li><p>Finalmente, la <code>Gateway L1 de WETH</code> vuelve a convertir los <strong>ETH</strong> a <strong>WETH</strong> y los envia a dirección del destinatario en L1.</p></li></ol><h4 id="h-caso-3-retiro-de-tokens-erc-721erc-1155" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0"><strong>Caso 3: Retiro de tokens ERC-721/ERC-1155</strong></h4><p>El retiro de este tipo de <em>tokens</em> funciona de manera similar a los <em>tokens</em> de tipo ERC-20, sin embargo, tal y como se muestra en la <strong>figura 10</strong>, los usuarios pueden acceder a las <strong>Gateways L1 de ERC-721/ERC-1155</strong> directamente sin la necesidad de depender de la <code>Gateway Router de L2</code><strong>.</strong></p><p>Al igual que en el caso de los depositos, la <code>Gateway L2 de ERC721</code> y la <code>Gateway L2 de ERC1155</code> tienen implementadas una función que permite depositar por lotes (o <em>batches</em>) varios tokens al mismo tiempo.</p><p>Para la finalización del depósito se utilizan la <code>Gateway L1 de ERC721</code> y la <code>Gateway L1 de ERC1155</code>, con los mismos comandos como en el caso de un ERC-20.</p><hr><h2 id="h-3-conclusion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>3. 👨‍🎓Conclusión</strong></h2><p>La arquitectura del puente de Scroll brinda la <strong>capacidad</strong> de transferir activos entre las capas L1 y L2. A través de mensajes entre dominio, Scroll facilita la comunicación entre L1 y L2 para las Dapps, lo que <strong>simplifica</strong> la interacción entre contratos y la transferencia de <em>tokens</em>.</p><p>Los procesos de envío de mensajes y transacciones, tanto de <strong>L1 a L2</strong> como de <strong>L2 a L1</strong>, implican una serie de contratos y pasos, que incluyen la codificación de mensajes, la gestión de <em>gateways</em> de <em>tokens</em> y la ejecución de transacciones.</p><p>Lo notable del puente de Scroll es su versatilidad, ya que <strong>no se limita</strong> a un solo tipo de <em>token</em>. Puede manejar diversos tipos de activos, como <strong>ETH</strong>, <em>tokens</em> <strong>ERC-20</strong> Standard, <strong><em>Custom tokens</em></strong> y <em>tokens</em> <strong>ERC-721/ERC-1155</strong>. Cada uno de estos activos tiene su propio flujo de trabajo y procesos de depósito/retiro, que incluye la selección de <em>gateways</em> adecuadas, así como también un mecanismo para forzar transacciones en caso de que el secuenciador <strong>falle</strong> o <strong>actúe maliciosamente</strong>.</p><p>Indudablemente, Scroll ha desarrollado una sólida y altamente adaptable arquitectura de puente que permite a los usuarios transferir activos de manera eficiente entre diferentes capas de la cadena. Esta arquitectura aporta <strong>flexibilidad</strong> y <strong>facilidad</strong> de uso, aspectos esenciales en el creciente ecosistema Web3. La tecnología de Scroll desempeña un papel crucial en la facilitación de la interoperabilidad en este entorno y se posiciona como una valiosa solución para la comunidad blockchain.</p><hr><h2 id="h-4-glosario" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4. 📄Glosario</h2><ol><li><p><strong>Bridge (Puente)</strong>: Un sistema que permite la transferencia de activos entre dos blockchains o cadenas de bloques.</p></li><li><p><strong>Web3</strong>: Un término que se refiere a la tercera generación de la web, que se centra en la descentralización y la interoperabilidad de las aplicaciones y activos en línea.</p></li><li><p><strong>Tokens</strong>: Representaciones digitales de activos o valores, como criptomonedas.</p></li><li><p><strong>Mensaje (Message)</strong>: Una comunicación digital que se envía de un lugar a otro, en este contexto, un mensaje puede ser una solicitud para transferir activos.</p></li><li><p><strong>Blockchain</strong>: Cadena de bloques, una tecnología de registro distribuido utilizada para almacenar transacciones de forma segura y transparente.</p></li><li><p><strong>Envueltos (Wrapped)</strong>: Tokens que representan otro activo y pueden circular en diferentes blockchains.</p></li><li><p><strong>L1 y L2 (Capas 1 y 2)</strong>: Capas de una solución de escalabilidad en la cadena de bloques, donde L1 se refiere a la cadena principal y L2 a una capa secundaria.</p></li><li><p><strong>Sender (Remitente)</strong>: La entidad que inicia una transacción o mensaje.</p></li><li><p><strong>Gateways (Pasarelas)</strong>: Plataformas o contratos inteligentes que facilitan el depósito o retiro de activos entre diferentes blockchains.</p></li><li><p><strong>Fee (Tarifa)</strong>: El costo asociado con una transacción en una cadena de bloques.</p></li><li><p><strong>Alias de Dirección</strong>: Una dirección alternativa utilizada para mejorar la seguridad y evitar abusos.</p></li><li><p><strong>Merkle Tree (Árbol de Merkle)</strong>: Una estructura de datos utilizada para verificar la integridad de los datos en una cadena de bloques.</p></li><li><p><strong>Trie</strong>: Una estructura de datos en forma de árbol utilizada en la cadena de bloques para almacenar información.</p></li><li><p><strong>Depósito (Deposit)</strong>: La acción de transferir activos a una cadena de bloques.</p></li><li><p><strong>Retiro (Withdrawal)</strong>: La acción de transferir activos fuera de una cadena de bloques.</p></li><li><p><strong>ETH (Ether)</strong>: La criptomoneda nativa de la plataforma Ethereum.</p></li><li><p><strong>ERC-20, ERC-721, ERC-1155</strong>: Estándares de tokens en la plataforma Ethereum.</p></li><li><p><strong>Hash</strong>: Un valor único generado a partir de datos, utilizado para verificar la integridad de la información.</p></li><li><p><strong>Batch (Lote)</strong>: Un grupo de transacciones o activos que se procesan juntos.</p></li><li><p><strong>Gateway Router (Enrutador de Pasarela)</strong>: Un componente que selecciona la pasarela adecuada para procesar una transacción.</p></li><li><p><strong>Custom Token (Token Personalizado)</strong>: Un token no estándar, diseñado de forma única.</p></li><li><p><strong>WETH (Wrapped Ether)</strong>: Ether envuelto, una representación de Ether que se puede utilizar en contratos inteligentes.</p></li></ol><h2 id="h-agradecimientos" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>🫂 Agradecimientos</strong></h2><p>🎉 ¡Gracias por leer hasta el final!🎉 Si está interesado en esta solución de escalabilidad te invitamos a revisar nuestra <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/39d63a8af9ca4524a7237b1f2456e745?v=95c70d362d8e4aae8007420ea6c827bc">biblioteca de Layer 2 en español</a>.</p><p>Por otro lado, te invitamos a leer sobre nuestra guía de como correr un Full Nodes usando Arbitrum Nitro 👇👇👇</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/J_kUr6roi4IVEuZXT44rfxO8L9n-yBZpPkOadrElPtw">https://mirror.xyz/layer2es.eth/J_kUr6roi4IVEuZXT44rfxO8L9n-yBZpPkOadrElPtw</a></p><p>Si quieren seguir aprendiendo y colaborando con nosotros, le invitamos a unirse a nuestra vibrante comunidad de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/l2espaniol">Telegram L2 en Español</a> y a seguirnos en nuestro <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://http/">Twitter L2 en Español</a>. Allí encontrará una gran cantidad de información sobre Layer 2 y el ecosistema de Blockchain en general. <strong>¡Te Esperamos!</strong></p>]]></content:encoded>
            <author>layer2es@newsletter.paragraph.com (L2 en Español)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/6efe92b639d6dc0b25c76909df946fe379e3eba598777ae9d2ef320df430cbe6.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Arbitrum Nitro: Guía para correr un full node]]></title>
            <link>https://paragraph.com/@layer2es/arbitrum-nitro-gu-a-para-correr-un-full-node</link>
            <guid>8vHvVogWyn6bIdo6FPpA</guid>
            <pubDate>Mon, 25 Sep 2023 16:58:53 GMT</pubDate>
            <description><![CDATA[IntroducciónLos Rollups, al igual que cualquier blockchain, operan en función de un nodo completo. En una blockchain de capa 1, el nodo completo representa la unidad fundamental que impulsa la seguridad y descentralización de la red. Para el usuario individual, proporciona accesibilidad, soberanía y privacidad al interactuar con la red. En un Optimistic Rollup completamente funcional, la noción de un "nodo completo" no ofrece el mismo nivel de beneficios desde la perspectiva de la red, debido...]]></description>
            <content:encoded><![CDATA[<h1 id="h-introduccion" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Introducción</h1><p>Los Rollups, al igual que cualquier blockchain, operan en función de un nodo completo. En una blockchain de capa 1, el nodo completo representa la unidad fundamental que impulsa la seguridad y descentralización de la red. Para el usuario individual, proporciona accesibilidad, soberanía y privacidad al interactuar con la red. En un Optimistic Rollup completamente funcional, la noción de un &quot;nodo completo&quot; no ofrece el mismo nivel de beneficios desde la perspectiva de la red, debido a que no sigue la misma lógica de a mayor cantidad de nodos mayor confianza como la L1. Sin embargo, sigue siendo una fuente valiosa de ventajas desde la perspectiva del usuario, y ofrece otras propiedades igualmente importantes.</p><p>En Arbitrum, los usuarios tienen la opción de ejecutar un nodo de la red, lo que implica tener una copia completa del rollup en forma de nodo completo o nodo archivo. Además, tanto los productores de bloques (secuenciadores) como aquellos encargados de proponer nuevas transiciones de estado (validadores) deben operar una versión de nodo completo que abarque todas sus responsabilidades en el proceso.</p><p>Si deseas explorar con mayor profundidad los roles y responsabilidades de estos participantes en Arbitrum, te recomendamos que leas este <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/L0YiPok0FymbnHZyA5GqbKL4OL0U4jBDwTuTGzD4PiE">artículo</a>. Te proporcionará una comprensión más completa de cómo funcionan estos agentes en la red.</p><p>Como comentamos anteriormente, existen diversas razones para considerar la ejecución de un nodo completo de Arbitrum:</p><ul><li><p><strong>Verificación Independiente del Estado del Rolup</strong>: Esto permite detectar transiciones de estado inválidas de manera local e independiente. <em>Esta propiedad es independiente de si el mecanismo de pruebas de fraude está habilitado o no.</em></p></li><li><p><strong>Acceso al Estado Actual o Anterior</strong>: Los usuarios pueden acceder al estado actual o anterior del rollup, lo que les permite solicitar información o interactuar con la red sin depender de servicios de terceros.</p></li><li><p><strong>Interacción Directa en la L2</strong>: Los usuarios pueden interactuar directamente en la capa 2 (L2) e incluso generar pruebas locales para realizar retiros e incluir transacciones de manera autónoma.</p></li><li><p><strong>Persistencia de los datos</strong>: los usuarios tienen acceso al historial del rollup. Esto cobrará más importancia luego de implementarse la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-4844">EIP-4844</a>.</p></li></ul><p>Cualquier proveedor de infraestructura en la red Arbitrum, como exploradores, puentes, keepers e indexadores, opera directamente o depende de un nodo completo. <strong>Esto demuestra la importancia de ejecutar y mantener un nodo completo para contribuir al funcionamiento eficiente de la red y aprovechar todas sus capacidades.</strong></p><h2 id="h-como-correr-un-full-node-de-arbitrum-nitro" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">¿Cómo correr un full node de Arbitrum Nitro?</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4070b5608df5600a4ed3eb79e7150219cfd75310983671fb2fad15b07dfa18f9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>A continuación encontrarás la información necesaria para configurar un nodo completo de Arbitrum Nitro en tu casa. Recorreremos el camino desde las precondiciones hasta la configuración del docker, de la forma más simple posible.</p><h2 id="h-1-precondiciones" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">1. Precondiciones</h2><h3 id="h-1a-hardware-minimo-necesario" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">1.a. Hardware mínimo necesario</h3><p>En esta sección, detallamos los requisitos de hardware mínimos necesarios para configurar un nodo completo de Arbitrum Nitro (no es un nodo de archivo) de manera efectiva. Para garantizar un funcionamiento óptimo, se recomienda contar con al menos la siguiente configuración:</p><ul><li><p>RAM: 8-16 GB</p></li><li><p>CPU: 2-4 núcleos</p></li><li><p>Almacenamiento: Mínimo 1.2 TB SSD (asegúrese de que sea posible agregar más espacio)</p></li><li><p>Tasa de crecimiento estimada: Aproximadamente 3 GB por día</p></li></ul><p>Es importante tener en cuenta que estos requisitos mínimos de almacenamiento pueden cambiar con el tiempo a medida que la red Nitro crece. Por lo tanto, se aconseja utilizar hardware que supere estos requisitos mínimos para ejecutar un nodo completo de manera eficiente.</p><h3 id="h-1b-herramientas-necesarias" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">1.b. Herramientas necesarias:</h3><p>Para configurar el nodo, necesitarás la siguiente herramienta:</p><ul><li><p>Última imagen de Docker: <strong>offchainlabs/nitro-node:v2.0.14-2baa834</strong></p></li></ul><p>Esto dependerá del sistema operativo de tu computadora. Te recomendamos consultar la documentación de Docker y seguir los pasos correspondientes para tu sistema. Por ejemplo, si utilizas Ubuntu, puedes consultar la guía en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.docker.com/engine/install/ubuntu/">https://docs.docker.com/engine/install/ubuntu/</a>.</p><p>Antes de comenzar, es crucial asegurarse de tener el Docker instalado en tu sistema. Si ya lo tienes instalado, desinstálalo y asegúrate de tener la última versión. Para verificar que la instalación se realizó correctamente, puedes ejecutar el siguiente comando en tu terminal:</p><pre data-type="codeBlock" text="sudo docker run hello-world
"><code>sudo docker run hello-world
</code></pre><p>Si recibes un mensaje de confirmación, la instalación de Docker se completó con éxito.</p><h2 id="h-2-como-configurar-tu-pc" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2. Cómo configurar tu PC</h2><p>Para esta etapa, se recomienda descargar Visual Studio Code, ya que facilita la visualización de carpetas y la apertura de múltiples terminales.</p><h3 id="h-2a-creacion-de-carpetas-y-archivos" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.a Creación de Carpetas y Archivos</h3><ul><li><p>Abrí Visual Studio Code y dirígete a File &gt; Open Folder &gt; Filesystem.</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0d0c0a0e32f1866576f4c2ba52b7ca21ee36a4aa92dbb6f92c9de735182830fd.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><ul><li><p>Abrí una nueva terminal en VS Code.</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f49d6e61bdb0b90ca96ca389cf2f03a61dc12d92b36cf73743997dec9482c826.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><ul><li><p>Navega hasta la carpeta &quot;home&quot; y crea una carpeta llamada &quot;user&quot; dentro de ella. Si encuentras problemas de permisos, puedes utilizar el siguiente comando dentro de /home:</p></li></ul><pre data-type="codeBlock" text="sudo chmod 777 /home
"><code>sudo <span class="hljs-built_in">chmod</span> 777 /home
</code></pre><ul><li><p>A continuación, crea una carpeta llamada &quot;.arbitrum&quot; dentro de la carpeta &quot;user&quot;. La dirección de esta carpeta será: home/user/.arbitrum.</p></li></ul><p>Para crear estas carpetas utilizando la terminal, el camino sería el siguiente:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1653950210aaef9eeae6feafe0548e1cd3fde6c81cc1385c8eb01b4bf1b8113d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>La dirección de la carpeta quedaría en: <strong>home/user/.arbitrum.</strong></p><p>Recarga el explorador en VS Code para visualizar las carpetas recién creadas.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5d8f40c8ce1114723a6b10f10c09046f0bc1c21a75880a6336307c174eacd90c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Dentro de la carpeta principal, dirígete a la carpeta &quot;<strong>user</strong>&quot; y luego a &quot;<strong>local</strong>&quot;, donde crearás otra carpeta llamada &quot;arbitrum&quot;. Si experimentas problemas de permisos para crear la carpeta &quot;arbitrum&quot;, puedes usar nuevamente el comando &quot;sudo chmod&quot; mencionado anteriormente.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c925054370b3e853226c8281800bfb964b69708cdae58b57e6cece0806b9edd4.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Dentro de /arbitrum, crea un nuevo archivo llamado &quot;<strong>docker-compose.yml</strong>&quot;. Puedes hacerlo fácilmente desde VS Code. La dirección de esta carpeta será: <strong>/usr/local/arbitrum/docker-compose.yml.</strong></p><h3 id="h-2b-permisos" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.b Permisos</h3><p>La imagen de Docker está configurada para ejecutarse como un usuario no root con UID 1000. Esto significa que si estás utilizando Linux u OSX y encuentras errores de permisos al intentar ejecutar la imagen de Docker, deberás ejecutar el siguiente comando para permitir que todos los usuarios actualicen las carpetas persistentes. Asegúrate de estar dentro de la carpeta &quot;usr/local/arbitrum&quot; al ejecutar este comando en la terminal:</p><pre data-type="codeBlock" text="chmod -fR 777 arbitrum
"><code><span class="hljs-built_in">chmod</span> -fR 777 arbitrum
</code></pre><p>Con esto, hemos otorgado al Docker permisos de escritura en nuestro directorio. Aún no utilizaremos el archivo, ya que iremos agregando contenido gradualmente.</p><h2 id="h-3-descargar-un-snapshot-de-arbitrum" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3. Descargar un Snapshot de Arbitrum</h2><p>Ahora vas a proceder a descargar los datos históricos de la blockchain de Arbitrum y los ubicarás en la carpeta <strong>/usr/local/arbitrum.</strong></p><p>Es importante que te asegures de estar en la carpeta <strong>/usr/local/arbitrum</strong> utilizando el comando &quot;<strong>cd</strong>&quot;. Se recomienda realizar la descarga mediante la terminal, ya que si se produce algún error de conexión (lo cual es posible), la terminal realizará automáticamente la solicitud para reanudar la descarga.A continuación, procederemos a descargar los datos históricos de la blockchain de Arbitrum. Estos datos se almacenarán en la carpeta <strong>/home/user/.arbitrum</strong>.</p><p><em>Podés realizarlo de 2 formas:</em></p><h3 id="h-3a-a-traves-de-la-terminal" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.a. A través de la terminal:</h3><p>Asegúrate de estar ubicado en la carpeta <strong>/home/user/.arbitrum</strong> antes de ejecutar este comando. Puedes navegar a esta carpeta utilizando el comando &quot;cd&quot; (change directory)</p><pre data-type="codeBlock" text="wget https://snapshot.arbitrum.foundation/arb1/nitro-pruned.tar
"><code>wget https://snapshot.arbitrum.foundation/arb1/nitro-pruned.tar
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c925054370b3e853226c8281800bfb964b69708cdae58b57e6cece0806b9edd4.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-3b-por-medio-de-un-navegador-web" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.b. Por medio de un navegador web:</h3><p>Deberías identificar el archivo llamado &quot;<strong>nitro-pruned.tar&quot;</strong> y descargarlo desde <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://snapshot.arbitrum.foundation/index.html">acá</a>.</p><p>En pantalla vas a ver lo siguiente:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7101726ec740d8ee647a08dd4655c90db80ade792bd160e2c53cd59bce33b947.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>Aclaración</strong>: Al momento de escribir esta guía, el tamaño del archivo es de alrededor de 310 GB.</p><h2 id="h-4-parametros-requeridos" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4. Parámetros requeridos</h2><p>El siguiente paso implica obtener un URL RPC de Ethereum para la Capa 1. Debes proporcionar la siguiente información:</p><pre data-type="codeBlock" text="-l1.url=&lt;Layer 1 Ethereum RPC URL&gt;
"><code><span class="hljs-operator">-</span>l1.url=<span class="hljs-operator">&#x3C;</span>Layer <span class="hljs-number">1</span> Ethereum RPC URL<span class="hljs-operator">></span>
</code></pre><p>Este parámetro requiere un enlace RPC de nodo estándar de Layer 1 que esté en funcionamiento, ya sea uno que administres tú mismo o que provenga de un proveedor de nodos confiable (si quisieras también correr tu propio nodo de Ethereum, podés revisar la guía creada por SeedLatam <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/seedlatam.eth/VpuKM5vy2uWpK-H-MVGcbZaCIlRVoC3iTsASDDXIhTY">aquí</a>).</p><pre data-type="codeBlock" text="-l2.chain-id=&lt;L2 Chain ID&gt;
"><code><span class="hljs-operator">-</span>l2.chain-id<span class="hljs-operator">=</span><span class="hljs-operator">&#x3C;</span>L2 Chain ID<span class="hljs-operator">></span>
</code></pre><p>Para obtener el URL necesario, en esta guía aprenderás cómo conectarte a un nodo proporcionado por Alchemy, uno de los principales proveedores de nodos en la red. Esto te permitirá obtener los recursos necesarios para continuar con la configuración.</p><p>Con estos pasos, estarás en camino de configurar tu propio nodo completo de Arbitrum Nitro de manera efectiva y contribuir al fortalecimiento de la red.</p><h2 id="h-5-como-conectarse-a-un-nodo-de-ethereum-en-alchemy" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5. Cómo conectarse a un Nodo de Ethereum en Alchemy</h2><p>Aquí tienes una guía paso a paso sobre cómo puedes conectarte a un nodo de Ethereum utilizando Alchemy como tu proveedor de nodo para conectarlo a tu nodo de Arbitrum:</p><h3 id="h-paso-1-registro-en-alchemy" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Paso 1: Registro en Alchemy</h3><p>Tu primer paso consiste en dirigirte al sitio web de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.alchemy.com/">Alchemy</a> para registrarte y proporcionar algunos detalles. Si ya te habías registrado anteriormente, simplemente inicia sesión.</p><h3 id="h-paso-2-creacion-de-una-nueva-aplicacion-de-ethereum" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Paso 2: Creación de una Nueva Aplicación de Ethereum</h3><p>Dirígete a la sección de &quot;<strong>Aplicaciones</strong>&quot; en el menú izquierdo y haz clic en el botón &quot;<strong>Crear nueva aplicación</strong>&quot;. Luego, selecciona lo siguiente:</p><p><strong>Cadena</strong>: Ethereum</p><p><strong>Red</strong>: Ethereum Mainnet</p><p><strong>Nombre</strong>: [Elige un nombre]</p><p><strong>Descripción</strong>: [Elige una descripción]</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e79a915e3f06a1983b7478a4809d4019830d0fbc1a315d5c59854c77e83bdab4.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Una vez configurado, haz clic en &quot;<strong>Crear aplicación</strong>&quot;. Regresa a la página de inicio, donde encontrarás la aplicación recién creada.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/27a88d648611ec0c32720041daf48558a96937c719d914eaefd351fb7655d264.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Haz clic en &quot;<strong>API key</strong>&quot; (la clave del API) y guarda el código HTTPS que necesitarás en el Paso 5: Configuración del Docker.</p><h1 id="h-5-configuracion-del-docker" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5. Configuración del docker</h1><p>Dirígete a <strong>/home/usr/local/arbitrum/docker-compose.yml</strong> y pega el siguiente contenido:</p><pre data-type="codeBlock" text="version: &apos;3.3&apos; 
services:
nitro-node:
network_mode:host 
image: &apos;offchainlabs/nitro-node:v2.0.14-2baa834&apos; 
user: 1000:1000 
restart: always 
stop_grace_period: 30s 
volumes: 
# localPath : containerPath 
- &apos;/usr/local/arbitrum:/home/user/.arbitrum&apos; 
ports:
- &apos;0.0.0.0:8547:8547&apos; 
- &apos;0.0.0.0:8548:8548&apos; 
command: 
- --init.url=file:///home/user/.arbitrum/nitro.tar 
- --l1.url=https://eth-mainnet.g.alchemy.com/v2/4FMFgbhtdTwvS-Mtt1V7PfUqh_CwYRN4 
- --l2.chain-id=42161 
- --http.api=net,web3,eth,debug 
- --http.corsdomain=* 
- --http.addr=0.0.0.0 
- --http.vhosts=* 
logging: 
driver: json-file 
options: 
max-size: 10m 
max-file: &quot;10&quot;
"><code>version: <span class="hljs-string">'3.3'</span> 
services:
nitro<span class="hljs-operator">-</span>node:
network_mode:host 
image: <span class="hljs-string">'offchainlabs/nitro-node:v2.0.14-2baa834'</span> 
user: <span class="hljs-number">1000</span>:<span class="hljs-number">1000</span> 
restart: always 
stop_grace_period: 30s 
volumes: 
# localPath : containerPath 
<span class="hljs-operator">-</span> <span class="hljs-string">'/usr/local/arbitrum:/home/user/.arbitrum'</span> 
ports:
<span class="hljs-operator">-</span> <span class="hljs-string">'0.0.0.0:8547:8547'</span> 
<span class="hljs-operator">-</span> <span class="hljs-string">'0.0.0.0:8548:8548'</span> 
command: 
<span class="hljs-operator">-</span> <span class="hljs-operator">-</span><span class="hljs-operator">-</span>init.url=file:<span class="hljs-comment">///home/user/.arbitrum/nitro.tar </span>
<span class="hljs-operator">-</span> <span class="hljs-operator">-</span><span class="hljs-operator">-</span>l1.url=https:<span class="hljs-comment">//eth-mainnet.g.alchemy.com/v2/4FMFgbhtdTwvS-Mtt1V7PfUqh_CwYRN4 </span>
<span class="hljs-operator">-</span> <span class="hljs-operator">-</span><span class="hljs-operator">-</span>l2.chain-id<span class="hljs-operator">=</span><span class="hljs-number">42161</span> 
<span class="hljs-operator">-</span> <span class="hljs-operator">-</span><span class="hljs-operator">-</span>http.api=net,web3,eth,debug 
<span class="hljs-operator">-</span> <span class="hljs-operator">-</span><span class="hljs-operator">-</span>http.corsdomain=<span class="hljs-operator">*</span> 
<span class="hljs-operator">-</span> <span class="hljs-operator">-</span><span class="hljs-operator">-</span>http.addr=<span class="hljs-number">0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span> 
<span class="hljs-operator">-</span> <span class="hljs-operator">-</span><span class="hljs-operator">-</span>http.vhosts=<span class="hljs-operator">*</span> 
logging: 
driver: json<span class="hljs-operator">-</span>file 
options: 
max<span class="hljs-operator">-</span>size: 10m 
max<span class="hljs-operator">-</span>file: <span class="hljs-string">"10"</span>
</code></pre><p><strong>Observación Importante</strong>: Cuando escribas el archivo manualmente, asegúrate de agregar espacios desde el comienzo de cada línea en lugar de usar tab, ya que el archivo podría no ser leído correctamente.</p><p><strong>Asegúrate de guardar el archivo después de pegar (Ctrl+S).</strong></p><p><strong>Consideraciones importantes:</strong></p><ul><li><p>Es fundamental que el parámetro image: &apos;<strong>offchainlabs/nitro-node:v2.0.14-2baa834</strong>&apos; coincida con la versión especificada en la documentación de Arbitrum. <em>Ten en cuenta que esta versión puede cambiar con el tiempo, por lo que debes verificar la versión actual en la documentación de Arbitrum y utilizar la que esté publicada allí.</em></p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/cfa0ed342f4e83361264fbbc8eb197cfe63eccd0f3a19cdb290984574ce9a3c5.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>En <strong>l2.chain-id</strong>, debes asignar el valor <strong>42161</strong>, ya que la documentación de Arbitrum indica que ese es el Chain ID de Arbitrum One.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/582a892b7b786abf4c7aabb0aae0cbd2804547be8780e09a7a6848c02d24fa49.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>El puerto en el que se ejecutará el RPC es 8547.</strong></p><h2 id="h-6-ejecutando-el-nodo-putting-it-all-together" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">6. Ejecutando el Nodo (Putting it all together)</h2><p>Ahora que has preparado la PC y configurado el Docker, es hora de ejecutar tu nodo de Arbitrum. Sigue estos pasos con atención para asegurarte de que todo funcione sin problemas.</p><p>Para iniciar el nodo, dirígete a la terminal y navega hasta /usr/local/arbitrum, luego ejecuta el siguiente comando:</p><pre data-type="codeBlock" text="sudo chmod 666 /var/run/docker.sock
"><code>sudo chmod <span class="hljs-number">666</span> <span class="hljs-operator">/</span><span class="hljs-keyword">var</span><span class="hljs-operator">/</span>run<span class="hljs-operator">/</span>docker.sock
</code></pre><p>Este comando te permitirá ejecutar los comandos de Docker que necesitas. A continuación, ejecutaras el comando principal para iniciar el nodo:</p><pre data-type="codeBlock" text="docker run --rm -it -v /usr/local/arbitrum:/home/user/.arbitrum 
-p 0.0.0.0:8547:8547 -p 0.0.0.0:8548:8548 offchainlabs/nitro-node:v2.0.14-2baa834 
--l1.url https://eth-goerli.g.alchemy.com/v2/b-CFpogLW7ZBL5idfoWOF3Tm5hI4OMk_ 
--l2.chain-id=421613 
--http.api=net,web3,eth,debug 
--http.corsdomain=* 
--http.addr=0.0.0.0 
--http.vhosts=*
"><code>docker run <span class="hljs-operator">-</span><span class="hljs-operator">-</span>rm <span class="hljs-operator">-</span>it <span class="hljs-operator">-</span>v <span class="hljs-operator">/</span>usr<span class="hljs-operator">/</span>local<span class="hljs-operator">/</span>arbitrum:<span class="hljs-operator">/</span>home<span class="hljs-operator">/</span>user<span class="hljs-operator">/</span>.arbitrum 
<span class="hljs-operator">-</span>p <span class="hljs-number">0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:<span class="hljs-number">8547</span>:<span class="hljs-number">8547</span> <span class="hljs-operator">-</span>p <span class="hljs-number">0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span>:<span class="hljs-number">8548</span>:<span class="hljs-number">8548</span> offchainlabs<span class="hljs-operator">/</span>nitro<span class="hljs-operator">-</span>node:v2<span class="hljs-number">.0</span><span class="hljs-number">.14</span><span class="hljs-operator">-</span>2baa834 
<span class="hljs-operator">-</span><span class="hljs-operator">-</span>l1.url https:<span class="hljs-comment">//eth-goerli.g.alchemy.com/v2/b-CFpogLW7ZBL5idfoWOF3Tm5hI4OMk_ </span>
<span class="hljs-operator">-</span><span class="hljs-operator">-</span>l2.chain-id<span class="hljs-operator">=</span><span class="hljs-number">421613</span> 
<span class="hljs-operator">-</span><span class="hljs-operator">-</span>http.api=net,web3,eth,debug 
<span class="hljs-operator">-</span><span class="hljs-operator">-</span>http.corsdomain=<span class="hljs-operator">*</span> 
<span class="hljs-operator">-</span><span class="hljs-operator">-</span>http.addr=<span class="hljs-number">0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span> 
<span class="hljs-operator">-</span><span class="hljs-operator">-</span>http.vhosts=<span class="hljs-operator">*</span>
</code></pre><p>Este es el desglose de los parámetros del comando:</p><ul><li><p><code>-docker run --rm -it -v /usr/local/arbitrum:/home/user/.arbitrum</code></p></li><li><p><code>-p 0.0.0.0:8547:8547 -p 0.0.0.0:8548:8548 offchainlabs/nitro-node:v2.0.14-2baa834</code></p></li><li><p><code>--l1.url https://eth-goerli.g.alchemy.com/v2/b-CFpogLW7ZBL5idfoWOF3Tm5hI4OMk_</code></p></li><li><p><code>--l2.chain-id=42161</code></p></li><li><p><code>--http.api=net,web3,eth,debug</code></p></li><li><p><code>--http.corsdomain=*</code></p></li><li><p><code>--http.addr=0.0.0.0</code></p></li><li><p><code>--http.vhosts=*</code></p></li></ul><p>Esto es una versión acortada del archivo de Docker que configuraste anteriormente, vas a tener que reemplazar los parámetros por tus valores. Al parámetro <strong>chain-id</strong> lo debes dejar en <strong>4261</strong> si estas en mainnet (Ver la tabla del paso anterior donde se indica el <strong>Chain ID</strong> dependiendo de la red a la cual nos queremos conectar).</p><p>Es importante que reemplaces el <strong>url</strong> de la <strong>L1</strong> que obtuviste en <strong>Alchemy</strong>. Una vez que hayas reemplazado los parámetros necesarios con tus propios valores, ejecuta el comando.</p><p>Vas a ver la siguiente imagen en pantalla:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e0b7ca86245f03b243d0c9c018cbdb5e2cb6ef2821495025c543cefe2bab7745.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-6a-verificacion-del-nodo" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">6.a Verificación del Nodo</h3><p>Si puedes ver información como se muestra en la imagen, ¡Felicitaciones, tu nodo está funcionando correctamente!</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5e18cec390b44c5f6336a9fe9e7ee3ff8fd705fdd7381e7f6315b03287c2426c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-6b-detener-el-nodo" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">6.b Detener el nodo</h3><p>Para detener el nodo, abrí otra terminal y ejecuta el siguiente comando:</p><pre data-type="codeBlock" text="docker stop --time=300 $(docker ps -aq)
"><code>docker stop <span class="hljs-operator">-</span><span class="hljs-operator">-</span>time<span class="hljs-operator">=</span><span class="hljs-number">300</span> $(docker ps <span class="hljs-operator">-</span>aq)
</code></pre><p>Este comando asegura un apagado ordenado de todas las imágenes de Docker en ejecución. Al apagar una imagen de Docker, es importante permitir un cierre ordenado para que el estado actual pueda ser guardado en disco.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/034714ff921bc1f0389080e0bc21992d68e12f6f4a583539bf80efbb6ade5fd3.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-6c-probando-comandos" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">6.c Probando comandos</h3><p>Ahora vas a volver a levantar el Nodo utilizando el siguiente comando:</p><pre data-type="codeBlock" text="docker compose up 
"><code></code></pre><p>(este comando utiliza el archivo que creaste en <strong>docker-compose.yml</strong>)</p><p>Así verás que tu nodo esta funcionando nuevamente y de forma correcta:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d4d9ae88a4af7370ec55e28cc95efb17373f545b1bf5683ae0e369077b0ae046.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h1 id="h-7-adicional" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">7. Adicional</h1><p>Puedes enviar varios comandos al nodo una vez que esté en funcionamiento. Consulta la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethereum.org/en/developers/docs/apis/json-rpc/#json-rpc-methods">documentación de Ethereum</a> para obtener una lista de métodos que puedes utilizar.</p><p>También, si deseas probar comandos, puedes utilizar <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.postman.com/hyperledger/workspace/hyperledger-besu/overview">Postman</a>. (shout out Juanu por el link)</p><p>De querer obtener algún dato en particular, podés utilizar los comandos que brinda la documentación de Ethereum, por ejemplo el blockNumber actual:</p><p>Vas a dirigirte a Postman y realizamos el post, se debe hacer desde la misma pc desde donde corre al nodo:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3b56a99147af8114a675980f311fe8a38dfb0abf4137e18440ba16f85dac9cc4.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-conclusion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Conclusión</h2><p>En resumen, con esta guía contarás con la información necesaria para correr tu propio nodo completo de Arbitrum y contar con la capacidad de verificar transacciones de forma independiente y con menos requisitos de confianza lo que termina fomentando la accesibilidad de la red.</p><p>Los recursos requeridos para un nodo completo son accesibles y su configuración, aunque técnica, es alcanzable para aquellos con conocimientos básicos de desarrollo Web3. Los pasos que hemos delineado, desde otorgar permisos del Docker y su configuración hasta la descarga del snapshot y ejecución del nodo, son el camino hacia la autonomía y la contribución activa a la resistencia de Arbitrum.</p><p>Además, al interactuar directamente con la L2 y tener acceso al estado de la red, podrás presenciar de primera mano los resultados de tu contribución al ecosistema.</p><p>Si consideras la soberanía, la resistencia a la censura y la accesibilidad como conceptos fundamentales, la ejecución de un nodo completo se convierte en un acto poderoso.</p><p>¡Es hora de correr tu propio nodo y formar parte del ecosistema activamente!</p>]]></content:encoded>
            <author>layer2es@newsletter.paragraph.com (L2 en Español)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/2cc3f048dbb75ccb99cb417dc19d71f5b18d60bca0a48ae578e3b0b398fc0720.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Arbitrum BOLD]]></title>
            <link>https://paragraph.com/@layer2es/arbitrum-bold</link>
            <guid>iQT3XkgmIQ85mRCKxANr</guid>
            <pubDate>Mon, 11 Sep 2023 22:06:25 GMT</pubDate>
            <description><![CDATA[🔵IntroducciónHoy en día, los Optimistic Rollups que incorporan sistemas de validación de pruebas de fraude, como Arbitrum One y Nova, llevan a cabo la validación de su estado en la cadena de Ethereum. Este proceso involucra a un conjunto de entidades conocidas como "validadores", los cuales emiten afirmaciones sobre el estado de la capa 2 (L2) en un contrato inteligente, después de haber verificado su autenticidad. Durante un periodo de 7 días, otros validadores tienen la posibilidad de impu...]]></description>
            <content:encoded><![CDATA[<h2 id="h-introduccion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>🔵Introducción</strong></h2><p>Hoy en día, los <em>Optimistic Rollups</em> que incorporan sistemas de validación de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.arbitrum.io/inside-arbitrum-nitro/#resolving-disputes-using-interactive-fraud-proofs"><strong>pruebas de fraude</strong></a>, como Arbitrum One y Nova, llevan a cabo la validación de su estado en la cadena de Ethereum. Este proceso involucra a un conjunto de entidades conocidas como &quot;<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.arbitrum.io/inside-arbitrum-nitro/#validators"><strong>validadores</strong></a>&quot;, los cuales emiten afirmaciones sobre el estado de la capa 2 (L2) en un contrato inteligente, después de haber verificado su autenticidad. Durante un periodo de <strong>7 días</strong>, otros validadores tienen la posibilidad de <strong>impugnar estas afirmaciones</strong>, dando inicio a un proceso de resolución de disputas. Una vez que una afirmación es confirmada, el estado subyacente se considera como válido desde la perspectiva de Ethereum. Este proceso de validación es esencial para <strong>garantizar la seguridad</strong> en la transferencia de activos entre las cadenas de Arbitrum y Ethereum L1, aunque conlleva un cierto retraso.</p><p>No obstante, en la actualidad, la validación en Arbitrum One y Nova, a través de pruebas de fraude, se encuentra <strong>limitada</strong> debido a la vulnerabilidad de sus protocolos de disputa frente a ataques de denegación de servicio (<strong>DoS</strong>). Un validador malintencionado podría gastar repetidamente fondos con el objetivo de evitar que las afirmaciones sean confirmadas, lo que resultaría en un <strong>retraso en los retiros</strong> de L2 a L1 durante el tiempo que él esté dispuesto a mantener dicha acción.</p><hr><p><strong>📝 Índice</strong></p><ol><li><p><strong><em>¿Qué son los ataques de denegación de servicio (DoS)?</em></strong></p></li><li><p><strong><em>Arbitrum BOLD</em></strong></p></li><li><p><strong><em>Arquitectura de BOLD</em></strong></p></li><li><p><strong><em>¿Cómo funciona?</em></strong></p></li><li><p><strong><em>Conclusión</em></strong></p></li></ol><hr><h2 id="h-que-son-los-ataques-de-denegacion-de-servicio-dos" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>🤷‍♂️¿Qué son los ataques de denegación de servicio (DoS)?</strong></h2><p>Por definición, los <strong>DoS Attacks</strong> son un tipo de ataque por el cual actores maliciosos buscan <strong>evitar</strong> que los usuarios de un sistema informático en línea puedan acceder al mismo saturándolo con peticiones ilegítimas de servicio.</p><p>Esta situación evita que los usuarios legítimos hagan uso del sistema y del servicio que el mismo presta. Este tipo de ataques pueden estar dirigidos a <strong>afectar la fuente</strong> que ofrece la información, la aplicación o el canal de transmisión del sistema. Algo que generalmente se logra al explotar vulnerabilidades o sobrecargar la capacidad de los servidores. El último caso es el más común de ellos, pues es sencillo, rápido y muy efectivo.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/21e3a60d89eff11009dd67ff7699d108448ad09904dce87c486a786db825c871.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Antes estas premisas, nos llega la pregunta:</p><p><strong><em>¿Existe alguna solución para evitar un escenario distópico en donde se puede afectar el sistema de disputas de Arbitrum?</em></strong></p><hr><h1 id="h-arbitrum-bold" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>⚔Arbitrum BOLD</strong></h1><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/64e29182f6f4e5e03630287ccdba846e0fe0a3d57da62936886de8bacbfbd793.png" alt="https://medium.com/offchainlabs/bold-permissionless-validation-for-arbitrum-chains-9934eb5328cc" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://medium.com/offchainlabs/bold-permissionless-validation-for-arbitrum-chains-9934eb5328cc</figcaption></figure><p>En el contexto de las cadenas L2, es esencial abordar los desafíos relacionados con los retrasos al asegurar la confirmación del estado  de la misma en la red Ethereum. En este sentido, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/OffchainLabs/bold/blob/main/docs/research-specs/BOLDChallengeProtocol.pdf">BOLD</a> surge como una <strong>evolución del sistema</strong> de resolución de disputas de Arbitrum, presentando un enfoque notablemente robusto.</p><p>BOLD representa el <strong>primer</strong> protocolo práctico de desafío que ofrece una eficiente gestión de disputas entre múltiples participantes. Las ventajas que ofrece BOLD son significativas:</p><ul><li><p><strong>Confirmaciones más Rápidas</strong>: BOLD garantiza límites superiores fijos en los tiempos de confirmación para la determinación del estado en el <em>Optimistic Rollup</em>.</p></li><li><p><strong>Equidad y Eficiencia</strong>: BOLD garantiza que incluso <strong>una sola entidad honesta</strong> pueda prevalecer frente a un número considerable de afirmaciones maliciosas.</p></li></ul><p>En el marco de BOLD, las disputas se vinculan con la ejecución determinista de un estado en la capa 2, y no con un <strong>staker</strong> o <strong>entidad específica</strong>. Esto implica que <strong>cualquier entidad que esté de acuerdo con un estado</strong> tiene el poder de defenderlo, hasta que surja un único punto de desacuerdo. Debido a la naturaleza determinista del estado L2 honesto, las entidades honestas siempre prevalecerán al participar, ya que las entidades maliciosas <strong>no pueden</strong> falsificar pruebas de ejecución, ya que las mismas tienen garantizada su realización en Ethereum.</p><hr><h1 id="h-arquitectura-de-bold" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>🧩Arquitectura de BOLD</strong></h1><p>Al analizar la interconexión de los componentes de BOLD, es útil tener en mente el software utilizado por un validador real en Arbitrum: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.arbitrum.io/for-devs/concepts/public-chains#nitro"><strong>Arbitrum Nitro</strong></a>. Entre sus responsabilidades clave se encuentran:</p><ul><li><p><strong>Ejecutar</strong> transacciones entrantes desde un contrato <em>Inbox</em> y generar post-estados conforme a la transición de estado en la capa 2.</p></li><li><p><strong>Transmitir</strong> lotes de transacciones a Ethereum L1 a través de un contrato denominado <code>SequencerInbox</code>.</p></li><li><p><strong>Validar</strong> transacciones y emitir afirmaciones, conocidas como aserciones, acerca del estado en la capa 2 a intervalos regulares en Ethereum, utilizando un contrato denominado <code>RollupCore.sol.</code></p></li><li><p><strong>Refutar</strong> las aserciones incorrectas enviadas por validadores deshonestos a <code>RollupCore.sol</code></p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/24f26a224b675cbf86dbebb62b5e3112b53ebcdffd4e84a3f611982a16a4f7cd.png" alt="https://github.com/OffchainLabs/bold/tree/main" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://github.com/OffchainLabs/bold/tree/main</figcaption></figure><p>Además, es importante destacar que la tecnología Arbitrum se está transformando en una arquitectura más <strong>modular</strong>, permitiendo la ejecución independiente de componentes específicos como binarios separados. BOLD implementa un componente de Nitro encargado de emitir aserciones y desafiar afirmaciones inválidas, dependiendo, por lo tanto, de otras partes del nodo Nitro para acceder a los datos de estado necesarios.</p><p>Adicionalmente, el <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/OffchainLabs/bold/tree/main">repositorio de BOLD</a> es un proyecto autónomo en GitHub, independiente de Nitro, y se conecta a las cadenas de Nitro como una dependencia para cumplir sus funciones.</p><hr><h1 id="h-como-funciona" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>🛠¿Cómo funciona?</strong></h1><p>El <code>BOLD Challenge Manager</code> de arriba interactúa con algunos elementos de un nodo Arbitrum, permitiéndole hacer movimientos de retos y enviar compromisos de historia a los contratos en Ethereum. En código de Arbitrum, se abstraen esos componentes del nodo L2 a través de una pequeña interfaz llamada <code>L2 State Provider</code>.</p><p>Recordemos que el núcleo primitivo del protocolo son los <strong><em>challenge edges</em></strong>, donde un <strong><em>edge</em></strong> representa un compromiso histórico de inicio y fin de una cadena Arbitrum. Los participantes en el protocolo pueden hacer movimientos en los retos, y los validadores pueden participar en muchos retos simultáneamente. Es decir, el software necesita rastrear <em>edges</em> dentro de un reto y su ciclo de vida para ganar contra entidades maliciosas.</p><p>La arquitectura detallada es la siguiente:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a848d272384d75ae11037a47374c6e5d717c8e6c7699d9182c6d4dc175d11691.png" alt="https://github.com/OffchainLabs/bold/tree/main" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://github.com/OffchainLabs/bold/tree/main</figcaption></figure><p>Funciona de la siguiente manera:</p><ol><li><p>Un <code>Assertion Poster</code> frecuentemente toma mensajes validados del validador L2 y los publica <em>on-chain</em>.</p></li><li><p>Un <code>Assertion Scanner</code> comprueba los contratos inteligentes en Ethereum en busca de nuevas aserciones publicadas y las compara con la <strong>base de datos local</strong> del nodo Nitro (o “<code>DB</code>” por sus siglas en inglés). Esto se hace a través de una abstracción conocida como <code>L2 State Provider</code>. Esto está dentro de <code>assertions/scanner.go</code></p></li><li><p>Si no estamos de acuerdo con una aserción, nuestro <code>Challenge Manager</code> envía un desafío on-chain creando un canal de nivel cero, y rastrea ese canal como una <em>go routine</em>.</p></li><li><p>Nuestro <code>Chain Watcher</code>, en segundo plano, escanea otros <em>edges</em> creados en la cadena y genera <em>goroutines</em> “<code>Edge trackers</code>” para los <em>edges</em> honestos que aún no se han rastreado.</p></li></ol><p>Cada <em>Edge</em> es rastreado como una <em>goroutine</em> llamada <code>Edge Tracker</code>. Los <code>Edge Tracker</code> son <em>goroutines</em> autónomos que se activan a intervalos de tick especificados y utilizan una máquina de estados finitos para decidir qué movimiento de desafío realizar. Por ejemplo, después de crear un <em>edge</em>, intentará dividirla, y confirmarla mediante una prueba de un paso o crear un subdesafío, dependiendo de cómo se presenta el estado actual.</p><p>Este es el aspecto de la máquina de estados finitos de un rastreador de aristas, cuyo estado final es confirmado:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c0d8cd9b99d7d2bcfb9b111115b154346282d7240a54722b540b4e36dbf3e943.png" alt="https://github.com/OffchainLabs/bold/tree/main" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://github.com/OffchainLabs/bold/tree/main</figcaption></figure><p>Una vez que se confirma un <em>edge</em> de nivel cero para un desafío sobre una afirmación, la afirmación puede validarse y la parte honesta saldrá victoriosa.</p><hr><h1 id="h-conclusion" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>👨‍🎓Conclusión</strong></h1><p>Arbitrum ha creado un nuevo enfoque para la validación que nos da un límite superior fijo de <strong>7</strong> días de retraso adicional en las confirmaciones sin sufrir ataques de retraso. BOLD puede hacer que la validación de las cadenas Arbitrum sea segura y sin permisos, lo que las hace subir muchos peldaños en la escalera de la descentralización. El enfoque permite a un <strong>único validador</strong> honesto ganar disputas en Ethereum contra cualquier número de adversarios.</p><p>Con su incorporación, BOLD busca añadir a Arbitrum, una mejor seguridad, <em>liveness</em> y latencia para establecer estados en su cadena y, al mismo tiempo, evitar que las partes deshonestas aumenten el costo de las partes honestas.</p><p>Con Arbitrum BOLD, Ethereum contará con una implementación de Optimistic Rollup de propósito general completamente funcional, el cual permitirá asegurarlo bajo suposiciones de confianza ideales (<strong>1 de n</strong>) y escalar el ecosistema genuinamente y sin compromisos.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ab137208b094bda0fc1858179fa79c82024354d5cb780833f1a1795c6c68048e.jpg" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-agradecimientos" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>🫂 Agradecimientos</strong></h2><p>🎉 ¡Gracias por leer hasta el final!🎉 Si está interesado en esta solución de escalabilidad te invitamos a revisar nuestra <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/39d63a8af9ca4524a7237b1f2456e745?v=95c70d362d8e4aae8007420ea6c827bc">biblioteca de Layer 2 en español</a>.</p><p>Si quieres conocer mas a fondo la tecnología detrás de Arbitrum te invitamos a leer estos artículos👇👇👇</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/L0YiPok0FymbnHZyA5GqbKL4OL0U4jBDwTuTGzD4PiE"><strong>Introducción al Optimistic Rollup de Arbitrum</strong></a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/L0YiPok0FymbnHZyA5GqbKL4OL0U4jBDwTuTGzD4PiE">https://mirror.xyz/layer2es.eth/L0YiPok0FymbnHZyA5GqbKL4OL0U4jBDwTuTGzD4PiE</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/InEgFG-fRvNv4LTIUSGp0vF9PTyl58AdqswqaYJYu3M"><strong>Arbitrum One vs Arbitrum Nova</strong></a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/InEgFG-fRvNv4LTIUSGp0vF9PTyl58AdqswqaYJYu3M">https://mirror.xyz/layer2es.eth/InEgFG-fRvNv4LTIUSGp0vF9PTyl58AdqswqaYJYu3M</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/InEgFG-fRvNv4LTIUSGp0vF9PTyl58AdqswqaYJYu3M"><strong>Arbitrum Orbit</strong></a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/yqFRGQzBnGqV0z-fFeuwScBfwf3FVAaplYhThGs5E2E">https://mirror.xyz/layer2es.eth/yqFRGQzBnGqV0z-fFeuwScBfwf3FVAaplYhThGs5E2E</a></p><p>Si quieren seguir aprendiendo y colaborando con nosotros, le invitamos a unirse a nuestra vibrante comunidad de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/l2espaniol">Telegram L2 en Español</a> y a seguirnos en nuestro <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://http/">Twitter L2 en Español</a>. Allí encontrará una gran cantidad de información sobre Layer 2 y el ecosistema de Blockchain en general. <strong>¡Te Esperamos!</strong></p>]]></content:encoded>
            <author>layer2es@newsletter.paragraph.com (L2 en Español)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/64522268532ee4c05374264ba084d5fc80deb5fed4dfc17217e5ee21d9fe3292.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Arbitrum Orbit]]></title>
            <link>https://paragraph.com/@layer2es/arbitrum-orbit</link>
            <guid>KqFGq8EqnKNkWVV4LILB</guid>
            <pubDate>Mon, 07 Aug 2023 19:00:17 GMT</pubDate>
            <description><![CDATA[🔵IntroducciónCon el objetivo de seguir aumentando la adopción de la red de Arbitrum Offchain Labs lanzó un interesante producto llamado Arbitrum Orbit. Esta poderosa herramienta permite a los usuarios y desarrolladores crear sus propias cadenas Layer 3 (L3) en la infraestructura subyacente de las cadenas públicas de Capa 2 (L2) de Arbitrum. Estas cadenas L3, también conocidas como "cadenas Orbit", se pueden configurar como un Arbitrum Rollup o AnyTrust, según las necesidades del usuario. En ...]]></description>
            <content:encoded><![CDATA[<h1 id="h-introduccion" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>🔵Introducción</strong></h1><p>Con el objetivo de seguir aumentando la adopción de la red de Arbitrum Offchain Labs lanzó un interesante producto llamado <strong>Arbitrum Orbit</strong>. Esta poderosa herramienta permite a los usuarios y desarrolladores crear sus propias cadenas <strong>Layer 3</strong> (<strong>L3</strong>) en la infraestructura subyacente de las cadenas públicas de <strong>Capa 2</strong> (<strong>L2</strong>) de Arbitrum. Estas cadenas L3, también conocidas como &quot;<strong>cadenas Orbit</strong>&quot;, se pueden configurar como un <strong><em>Arbitrum Rollup</em></strong> o <strong><em>AnyTrust</em></strong>, según las necesidades del usuario.</p><p>En este artículo, exploraremos en detalle qué son las cadenas Orbit y cómo pueden brindar a los usuarios <strong>características mejoradas</strong> de escalabilidad, personalización e interoperabilidad, al tiempo que mantienen los principios de seguridad de la capa base de Ethereum. También discutiremos los <strong>beneficios</strong> que las cadenas Orbit ofrecen a sus propietarios y las diversas posibilidades que se abren gracias a su implementación.</p><p>¡Sigue leyendo para descubrir cómo Arbitrum Orbit puede llevar tus aplicaciones y proyectos a un nivel completamente nuevo de personalización y funcionalidad!</p><hr><h2 id="h-indice" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>📝 Índice</strong></h2><ol><li><p><strong>¿Qué es Arbitrum Orbit?.</strong></p></li><li><p><strong>¿Qué son las Orbit chains?.</strong></p></li><li><p><strong>Problemas que Orbit soluciona.</strong></p></li><li><p><strong>Beneficios de las Orbit chains.</strong></p></li><li><p><strong>Aplicaciones descentralizadas en Orbit (Dapps).</strong></p></li><li><p><strong>Compatibilidad entre Orbit chains.</strong></p></li><li><p><strong>Licencias de Arbitrum Orbit.</strong></p></li><li><p><strong>Guía de como desplegar una Orbit Chain.</strong></p><ol><li><p><em>Prerrequisitos.</em></p></li><li><p><em>Paso 1: Adquirir ETH en Arbitrum Goerli.</em></p></li><li><p><em>Paso 2: Configurar el despliegue de la Orbit chain.</em></p></li><li><p><em>Paso 3: Despliegue de los contratos base de la cadena en Arbitrum Goerli.</em></p></li><li><p><em>Paso 4: Configure los validadores de la cadena.</em></p></li><li><p><em>Paso 5: Configure el publicador de lotes de la cadena.</em></p></li><li><p><em>Paso 6: Descargue los archivos de la chain y despliegue de la misma. Paso 7: Clone el repositorio de scripts de configuración y agregue sus archivos.</em></p></li><li><p><em>Paso 8: Ejecute el nodo de su cadena y el e</em>xplorer.</p></li><li><p><em>Paso 9: termine de configurar su la chain.</em></p></li></ol></li><li><p><strong>Comandos útiles.</strong></p><ol><li><p><em>Registros.</em></p></li><li><p><em>Depositar ETH.</em></p></li><li><p><em>Resolución de problemas.</em></p></li></ol></li><li><p><strong>Conclusión.</strong></p></li></ol><hr><h2 id="h-1que-es-arbitrum-orbit" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>1.🤷‍♂️¿Qué es Arbitrum Orbit?.</strong></h2><p>Arbitrum Orbit es una herramienta creada por Offchain Labs que permite a los usuarios o desarrolladores crear su propia cadena <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.datawallet.com/crypto/what-is-a-layer-3-crypto#:~:text=In%20the%20context%20of%20cryptocurrency,and%20customization%20for%20decentralized%20applications.">Layer 3</a> (o L3) que se establece de manera subyacente en una de las cadenas públicas de L2 de Arbitrum.  Estas L3, también llamadas “Orbit chains”, pueden ser configuradas para ser de tipo <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://developer.arbitrum.io/inside-arbitrum-nitro/#arbitrum-rollup-protocol"><em>Arbitrum Rollup</em></a> o <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://developer.arbitrum.io/inside-arbitrum-nitro/#inside-anytrust"><em>AnyTrust</em></a> dependiendo de las necesidades del usuario.</p><hr><h2 id="h-2que-son-las-orbit-chains" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>2.⛓¿Qué son las Orbit chains?.</strong></h2><p>Las <em>Orbit chains</em> o “cadenas Orbit” pueden ser definidas como <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://blog.satoshitango.com/que-es-un-fork/"><strong>forks</strong></a> desplegables y configurables creadas a partir de la tecnología L2 Nitro de Arbitrum, las cuales están estrechamente conectadas a las cadenas L2 de Arbitrum. También pueden ser visualizadas como <strong>cadenas personalizadas</strong>, diseñadas específicamente para adaptarse a un caso determinado, ya sea de uso personal o empresarial.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7c38fbb47d2943ba2c4e0575cb78363dcaafbc162621c48ccb4afb8ae9eea77d.png" alt="https://docs.arbitrum.io/launch-orbit-chain/orbit-gentle-introduction" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://docs.arbitrum.io/launch-orbit-chain/orbit-gentle-introduction</figcaption></figure><p>Al utilizar estas <em>chains</em> personalizadas, los usuarios pueden encontrar una forma adicional de descentralizar gradualmente sus aplicaciones y adoptar de manera intrínseca las características de seguridad y supuestos de confianza de la Layer 2 de Arbitrum, ya que ésta actúa como capa base de las <em>Orbit chains</em>.</p><p>Por otro lado, estas chains están diseñadas para permitir integrar de forma continua las <strong>mejoras realizadas</strong> a Arbitrum Nitro, que es el código que alimenta los nodos que respaldan las cadenas L2 y Orbit de Arbitrum.</p><p>Es importante destacar que Arbitrum One y Arbitrum Nova implementan los protocolos <em>Arbitrum Rollup</em> y <em>AnyTrust</em>, respectivamente. Cada cadena Orbit puede configurarse para utilizar la tecnología <em>Rollup</em> o <em>AnyTrust</em> dependiendo de los gustos o necesidades del usuario que será propietario de la <em>Orbit chain</em>.</p><p>Arbitrum One y Arbitrum Nova <strong>son propiedad</strong> y están gobernadas por la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://forum.arbitrum.foundation/">DAO de Arbitrum</a>. Por otro lado, con las cadenas Orbit, cada propietario <strong>determina</strong> cómo se gobernará su cadena. Aun así, la <strong>DAO de Arbitrum permite</strong> que cualquier propietario de una <em>Orbit chain</em> pueda establecerse y ser gobernada por la comunidad tal como las redes de Arbitrum One y Arbitrum Nova.</p><hr><h2 id="h-3problemas-que-orbit-soluciona" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>3.🔧Problemas que Orbit soluciona.</strong></h2><p>El espacio de bloques en Ethereum posee una alta demanda, por tal motivo, muchos usuarios quedan “atascados” esperando que la red esté un poco menos congestionada (y además de menos costosa en cuestión de comisiones).</p><p>Los protocolos <em>Rollup</em> y <em>AnyTrust</em> de Arbitrum abordan este reto descargando parte del trabajo pesado de la red Ethereum a otra red descentralizada de nodos que soportan las cadenas Arbitrum One y Arbitrum Nova L2, respectivamente.</p><p>Estas dos cadenas públicas satisfarán las necesidades de la mayoría de los proyectos. Pero las cadenas públicas compartidas no son para todos. Algunos proyectos pueden beneficiarse de <strong>sus propias cadenas</strong> <em>AnyTrust</em> o <em>Rollup</em> que ofrecen la misma seguridad, pero con un <strong>mayor grado de control</strong> sobre las características de la cadena y la gobernanza.</p><p>Las cadenas <em>Orbit</em> te ofrecen la posibilidad de crear tus propias cadenas <em>AnyTrust</em> y <em>Rollup</em> utilizando <strong>tu propia infraestructura</strong>. Puedes pensar en tu cadena <em>Orbit</em> como un carril prioritario autogestionado en Ethereum. Cada cadena <em>Orbit</em> es capaz de soportar varias veces la capacidad de Ethereum, al tiempo que se beneficia directamente de la seguridad de Ethereum.</p><p>En pocas palabras, las cadenas Arbitrum One y Arbitrum Nova desbloquean dos opciones públicas de despliegue de contratos gestionados por <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://forum.arbitrum.foundation/">DAO</a> que escalan Ethereum y satisfacen las necesidades de la mayoría de los proyectos.</p><p>Por su parte, las cadenas Arbitrum Orbit desbloquean un <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethereum.foundation/infinitegarden"><strong>jardín infinito</strong></a> de opciones de despliegue de contratos autogestionados que escalan Ethereum aún más, con cada cadena Orbit individual adaptada con precisión a las necesidades de su propietario.</p><hr><h2 id="h-4beneficios-de-las-orbit-chains" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>4.✅Beneficios de las Orbit chains.</strong></h2><p>Al ser propietario de alguna de estas <em>Orbit chains</em> puede personalizar su privacidad, permisos, tarifas, gobernanza y mucho más. Algunos ejemplos de posibilidades que esto desbloquea:</p><ul><li><p><strong>Lanzar</strong> <strong>una red blockchain</strong> descentralizada impulsada por Nitro, y que se beneficie de las <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.arbitrum.io/inside-arbitrum-nitro/#resolving-disputes-using-interactive-fraud-proofs">pruebas de fraude</a>, la compresión avanzada, la compatibilidad con <strong>EVM+</strong> a través de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://offchain.medium.com/hello-stylus-6b18fecc3a22">Stylus</a> y las mejoras continuas de Nitro.</p></li><li><p><strong>Ofrecer</strong> <strong>fiabilidad</strong> en el precio del gas a sus usuarios finales gracias al rendimiento dedicado y al aislamiento del tráfico que las cadenas Orbit tienen por defecto.</p></li><li><p><strong>Acceso con permisos</strong> para controlar quién puede leer los datos de su cadena y quién puede desplegar contratos inteligentes en ella. Su cadena puede ser completamente sin permisos como Ethereum y Arbitrum One, o puede implementar sus propias políticas de permisos.</p></li><li><p><strong>Cobrar comisiones</strong> utilizando activos diferentes a ETH para iterar rápidamente sobre diseños de mecanismos específicos del dominio y oportunidades de captura de valor.</p></li></ul><hr><h2 id="h-5aplicaciones-descentralizadas-en-orbit-dapps" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>5.📱Aplicaciones descentralizadas en Orbit (Dapps).</strong></h2><p>Una de los usos de las <em>orbit chains</em> puede ser para desplegar alguna aplicación descentralizada, ya que generalmente estas dependen de un control y actualización recurrente por parte de los desarrolladores de la misma. Entre los beneficios que las <em>orbits chains</em> traen para este tipo de soluciones:</p><ul><li><p><strong>Rendimiento dedicado</strong>: Al ejecutar una <em>dApp</em> en su propia cadena <em>orbit</em> aumentará significativamente la disponibilidad de recursos.</p></li><li><p><strong>Compatibilidad con EVM+</strong>: Las <em>orbit chains</em> son compatibles con Ethereum gracias a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://offchain.medium.com/hello-stylus-6b18fecc3a22">Stylus</a>, lo que significa que se pueden crear códigos usando Solidity, pero también en C, C++ y Rust sin problemas.</p></li><li><p><strong>Roadmaps independientes</strong>: Si desea desvincular la hoja de ruta de su cadena de aplicaciones de la de Ethereum y/o Arbitrum, <em>Orbit</em> lo hace posible. Esto le permite implementar funciones de vanguardia como la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethereum.org/en/roadmap/account-abstraction/"><em>Account Abstraction</em></a> antes de los proyectos que siguen la hoja de ruta pública de Ethereum.</p></li><li><p><strong>Mayor confiabilidad en el precio del gas</strong>: Diversos tipos de <em>dApps</em> utilizan costos de transacción predecibles. Al optar por las cadenas <em>Orbit</em>, que están separadas del tráfico de Arbitrum L2 y Ethereum L1, el impacto de la actividad en cadena de otras aplicaciones no afectará significativamente su funcionamiento. Esto permite a los usuarios de su dApp disfrutar de tarifas de gas más estables y confiables.</p></li><li><p><strong>Di hola a <em>Account Abstraction</em></strong>: La estabilidad en los precios del gas es de gran utilidad para prever y calcular los costos comerciales, permitiendo así explorar enfoques tradicionalmente costosos, como subsidiar las tarifas de transacción. Esto simplifica la complejidad técnica de las aplicaciones descentralizadas para los usuarios finales, lo que les brinda experiencias descentralizadas que resultan familiares para audiencias no técnicas, quienes pueden no estar familiarizadas o interesadas en los detalles de la implementación.</p></li><li><p><strong>Tokens para los fees</strong>: Las cadenas <em>Orbit</em> pueden usar cualquier <em>token</em> que elija como token de tarifa, lo que facilita la integración perfecta con el ecosistema de su <em>dApp</em>.</p></li><li><p><strong>Lógica de protocolo personalizable</strong>: Puede ser necesario ajustar la lógica de los procedimientos de liquidación, ejecución o gobierno de su red blockchain para satisfacer requisitos particulares. Las redes de <em>Orbit</em> ofrecen esta capacidad al tiempo que aprovechan la seguridad de Ethereum mediante cadenas L2 que son gobernadas por la organización autónoma descentralizada (DAO) de Arbitrum.</p></li><li><p><strong>Compatibilidad con Arbitrum Nitro</strong>: Las cadenas <em>Orbit</em> tendrán acceso a todas las actualizaciones de código Nitro, adiciones de funciones y mejoras, lo que le dará a su cadena <em>Orbit</em> la opción de mantenerse actualizada e incorporar lo último y lo mejor en tecnología de escalado de Ethereum.</p></li><li><p><strong>Opciones de descentralización</strong>: Puede crear una cadena Arbitrum <em>Rollup</em> que use Ethereum para la disponibilidad de datos, o puede crear una cadena Arbitrum <em>AnyTrust</em> que use un Comité de Disponibilidad de Datos (<em>DAC</em>) según las necesidades y gustos del usuario.</p></li><li><p><strong>Seguridad</strong>: La tecnología Arbitrum impulsa las L2 más seguras, y puede usar este mismo <em>stack</em> de tecnología para su cadena <em>Orbit</em>.</p></li></ul><hr><h2 id="h-6compatibilidad-entre-orbit-chains" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>6.🧩Compatibilidad entre Orbit chains.</strong></h2><p>Todas las cadenas de <em>Orbit</em> funcionan con nodos autogestionados que ejecutan su propia instancia del <em>software</em> del nodo de Arbitrum Nitro. Esto significa que una cadena <em>Orbit</em> personalizada no es una red completamente aislada, ya que cuando esta es creada, se une a un ecosistema de cadenas conectadas que pueden intercambiar información entre sí.</p><p>Actualmente las funciones de interoperabilidad nativa entre cadenas <em>Orbit</em> no se han lanzado, pero si están bajo desarrollo y planeadas en la hoja de ruta de Arbitrum.</p><hr><h2 id="h-7licencias-de-arbitrum-orbit" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>7.📜Licencias de Arbitrum Orbit.</strong></h2><p>Estas licencias no son más que permisos completos, que dan la posibilidad a los usuarios de modificar el código base de Arbitrum Nitro para satisfacer sus necesidades. Existen 2 tipos de licencias:</p><ul><li><p><strong>Perpetua:</strong> Dura indefinidamente.</p></li><li><p><strong>Recursiva:</strong> Que su cadena <em>Orbit</em> puede albergar otras cadenas regidas por la misma licencia.</p></li></ul><p>Es importante destacar que la licencia de Arbitrum <em>Orbit</em> <strong>no incluye</strong> cadenas establecidas en una cadena no gobernada por la DAO de Arbitrum. Lo que quiere decir que si se quiere lanzar una cadena Nitro como L2 independiente de Ethereum deberá obtener una <strong>licencia personalizada</strong>.  Esto se puede lograr <strong>preguntando</strong> directamente a Offchain Labs (<strong>dueño del <em>software</em></strong>) o través de la DAO (<strong>mediante un propuesta</strong>).</p><hr><h2 id="h-8guia-de-como-desplegar-una-orbit-chain" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>8.👨‍🍳Guía de como desplegar una Orbit Chain.</strong></h2><h3 id="h-81-prerrequisitos" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>8.1 Prerrequisitos.</strong></h3><ul><li><p>Se debe tener el <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.docker.com/get-docker/"><strong>Docker</strong></a> instalado.</p></li><li><p>Por lo menos <strong>1.5 ETH</strong> en la testnet de Ethereum Goerli.</p></li><li><p>Una <em>wallet</em> de Ethereum con soporte en un browser. (Por ejemplo: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn">MetaMask</a>)</p></li></ul><p>Una vez reunidos los requisitos procederemos a ingresar al <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://orbit.arbitrum.io/deployment"><strong>portal de implementación de Orbit chain</strong></a>.</p><h3 id="h-82-paso-1-adquirir-eth-en-arbitrum-goerli" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>8.2 Paso 1: Adquirir ETH en Arbitrum Goerli.</strong></h3><p>Necesitará al menos <strong>1.5 ETH</strong> en Arbitrum Goerli para cubrir el costo de implementar los contratos base de su cadena Orbit en su cadena base (<strong>Arbitrum Goerli</strong>).</p><p>Para hacer esto se recomienda usar el <em>faucet</em> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goerlifaucet.com/">goerlifaucet.com</a> para adquirir los ETH Goerli testnet L1 necesarios. Luego de ello, transfiere dichos fondos desde <strong>Goerli testnet L1</strong> a la <strong>Goerli Arbitrum L2</strong> usando el <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bridge.arbitrum.io/?l2ChainId=421613">Bridge de Arbitrum</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1f02159ba73a4d774cafd237c0d79a6ca20232196e9ad5eb174270fe975cb5c6.png" alt="https://bridge.arbitrum.io/?l2ChainId=421613" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://bridge.arbitrum.io/?l2ChainId=421613</figcaption></figure><h3 id="h-83-paso-2-configurar-el-despliegue-de-la-orbit-chain" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>8.3 Paso 2: Configurar el despliegue de la Orbit chain.</strong></h3><p>Visite el <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://orbit.arbitrum.io/deployment">portal de implementación de la Orbit chain</a>. Se le pedirá que conecte su billetera. Es posible que se le solicite agregar la red Arbitrum Goerli a su billetera y/o cambiar su billetera a esta red; luego de ello apruebe dicha solicitud.</p><p>El portal de implementación mostrará un formulario similar a este:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/79bd029290f2464b7c591e3b318c0a87e846d0d8d6870236ff959ef9afa7a9a8.png" alt="https://docs.arbitrum.io/launch-orbit-chain/orbit-quickstart" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://docs.arbitrum.io/launch-orbit-chain/orbit-quickstart</figcaption></figure><p>En este <strong>IU</strong> muestra los siguientes campos que deben ser debidamente rellenados, aunque algunos son puestos automáticamente por la plataforma:</p><h4 id="h-chain-id" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0"><strong>Chain ID</strong></h4><p>No te preocupes por esto; es intrascendente para los desarrolladores. En escenarios de producción (que aún no son compatibles), querrá usar un identificador entero único que represente la red de su cadena en índices de cadena como <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://chainlist.org/">Chainlist.org</a>.</p><h4 id="h-chain-name" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0"><strong>Chain name</strong></h4><p>Es el nombre de la chain, es una manera de para que cada Orbit chain pueda diferenciarse de otras. Se recomienda usar un nombre fácil de recordar y distintivo entre los usuarios.</p><h4 id="h-challenge-period-blocks" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0"><strong>Challenge period (blocks)</strong></h4><p>El <code>Challenge period (blocks)</code> es parámetro determina la cantidad de tiempo que los validadores de su cadena tienen para <strong>disputar</strong>, o &quot;<strong>desafiar</strong>&quot;, la integridad de las transacciones publicadas en la cadena base de su cadena <em>Orbit</em> en L2 (Arbitrum Goerli por ahora; la liquidación en las cadenas principales One y Nova aún no es compatible).</p><p>Un período de desafío más largo significa que los nodos de su cadena tendrán más tiempo para disputar transacciones fraudulentas, pero también significa que los usuarios de su cadena tendrán que esperar más tiempo para que finalicen sus transacciones. Esta es una de las muchas compensaciones que <em>Orbit</em> le permite hacer al configurar su cadena.</p><p>Tenga en cuenta que el período de desafío se mide en bloques en la cadena L1 subyacente, no en la cadena base (L2). Si su cadena <em>Orbit</em> se establece en Arbitrum Goerli, la ventana del período de desafío sería el número de <strong><em>Challenge period (blocks)</em></strong> multiplicado por el tiempo de bloque L1 Goerli (<strong>~12 segundos</strong>).</p><h4 id="h-stake-token" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0"><strong>Stake token</strong></h4><p>Su cadena <em>Orbit</em> estará respaldada por al menos un nodo. Para que los nodos de su cadena registren transacciones, deben hacer stake de algún valor como una forma de incentivar la participación honesta.</p><p>Este parámetro <code>Stake token</code> especifica el tipo de token que los nodos de su cadena deben depositar en este contrato cuando hacen stake. Esto se especifica utilizando la dirección del contrato del token en la cadena L2 en la que su cadena se está asentando a Arbitrum Goerli</p><h4 id="h-base-stake" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0"><strong>Base stake</strong></h4><p>El parámetro <strong><em>Base stake</em></strong> especifica la cantidad de ETH que el validador de su cadena debe depositar para comenzar a proponer lotes de transacciones de su cadena <em>Orbit</em> a sus contratos base. Esto se especifica mediante un valor flotante.</p><p>Si el <strong><em>Base stake</em></strong> es bajo, la barrera de participación será baja, por lo que la cadena será más vulnerable a ciertos tipos de ataques.</p><p>Por ejemplo, una cadena <em>Orbit</em> con un stake base de 0,01 ETH podría ser detenida por un adversario que puede permitirse el lujo de implementar validadores de sacrificio que desafían maliciosamente cada <em>RBlock</em> enviado a la cadena base de su cadena Orbit.</p><p>Los desafíos maliciosos darían como resultado validadores de la cadena <em>Orbit</em> castigados (un validador castigado por desafío malicioso), pero desde la perspectiva del adversario, el castigo periódico es solo el precio que tienen que pagar para mantener su cadena fuera de línea.</p><p>Una apuesta base más alta incentiva la participación honesta al hacer que sea más costoso lanzar este tipo de ataques. Sin embargo, una apuesta base más alta también se traduce en una barrera de entrada más alta para los operadores validadores de su cadena. Esta es otra compensación a considerar.</p><h4 id="h-owner" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0"><strong>Owner</strong></h4><p>Esta dirección de cuenta es responsable de implementar, poseer y actualizar los contratos base de su cadena <em>Orbit</em> en su cadena base.</p><p>En escenarios de producción, esta es una dirección de alto riesgo que a menudo está controlada por un protocolo de gobernanza de DAO o la <em>multisig</em>. Para su cadena de desarrollo <em>Orbit</em>, piense en esto como una cuenta de servicio administrativo de bajo riesgo.</p><p>Tenga en cuenta que deberá financiar esta dirección con suficiente ETH para cubrir los costos de gas de implementar sus contratos principales en L2.</p><p>Esta dirección debe ser una dirección de billetera Ethereum estándar (precisamente hablando, un EOA); no puede ser un contrato inteligente/contrato de billetera.</p><h2 id="h-84-paso-3-despliegue-de-los-contratos-base-de-la-cadena-en-arbitrum-goerli" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>8.4 Paso 3: Despliegue de los contratos base de la cadena en Arbitrum Goerli.</strong></h2><p>Haga clic en el botón <code>Deploy Rollup</code> ubicado debajo del formulario de configuración. Su billetera debería indicarle que envíe una transacción a Arbitrum Goerli. Tendrá que pagar un poco de gas; su billetera puede denominar esto en $ ETH; siempre que vea <code>Arbitrum Goerli</code> en los detalles de la transacción, esta tarifa de gas se pagará en ETH de Arbitrum Goerli.</p><p>Una vez que se confirme esta transacción de envío de transacción, verá que aparecen varias direcciones de contrato debajo de su <code>Deployment Summary</code>. Estos son los contratos base de su cadena <em>Orbit</em>, desplegados en su cadena base (Arbitrum Goerli).</p><p>Antes de continuar, repasemos brevemente lo que acaba de suceder:</p><ul><li><p>Envió una transacción de implementación a un contrato inteligente de &quot;fábrica&quot; ​​de Orbit en Arbitrum Goerli, la cadena L2 pública en la que su cadena <em>Orbit</em> local liquidará las transacciones.</p></li><li><p>Este contrato inteligente de <em>Orbit</em> luego inicializó los contratos base de su cadena <em>Orbit</em> con los valores que especificó en el paso anterior e implementó estos contratos base en Arbitrum Goerli.</p></li></ul><p>Los contratos base de su cadena <em>Orbit</em> son responsables de facilitar el intercambio de información entre los nodos de su cadena y los nodos de su cadena base. Esto incluye la publicación por lotes de transacciones desde su cadena Orbit a su cadena base, el replanteo de tokens por parte de los validadores de su cadena Orbit, el mecanismo de desafío, los mecanismos puente y más.</p><p>Una vez terminado esto, haga clic en <code>Next</code> para continuar con el siguiente paso.</p><h2 id="h-85-paso-4-configure-los-validadores-de-la-cadena" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>8.5 Paso 4: Configure los validadores de la cadena.</strong></h2><p>Debería ver una sección llamada <code>Configure Validators</code>, con un formulario que se ve así:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a2d62440eff22d5f9f68b3a853bb19f5e81f720e33cfe0e3109e65f8c4288e75.png" alt="https://docs.arbitrum.io/launch-orbit-chain/orbit-quickstart" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://docs.arbitrum.io/launch-orbit-chain/orbit-quickstart</figcaption></figure><p>El primer campo de entrada es un valor entero que determina la cantidad de validadores que admitirán su implementación inicial. Los campos subsiguientes le permiten especificar cada una de las direcciones de estos validadores.</p><p>La primera dirección del validador se genera aleatoriamente y no se puede cambiar. Su clave privada se generará automáticamente y se almacenará dentro de uno de los archivos de configuración <em>JSON</em> que se generarán en un momento.</p><p>Los validadores de su cadena son responsables de validar la integridad de las transacciones y publicar afirmaciones del estado actual de su cadena <em>Orbit</em> en su cadena base. En escenarios de producción, su cadena <em>Orbit</em> probablemente estaría alojada en una red de nodos de validación que trabajan juntos. Para su cadena <em>Orbit</em> local, puede ceñirse a la dirección de validación única generada automáticamente.</p><p>Cada una de las direcciones de validación especificadas en este paso se agregará a una lista de permitidos en uno de los contratos base de su cadena, lo que les permitirá validar y validar las transacciones enviadas a su cadena <em>Orbit</em>.</p><p>Haga clic <code>Submit</code> para emitir otra transacción de Arbitrum Goerli que incluya en la lista de permitidos sus direcciones de validación configuradas dentro de los contratos base de su cadena <em>Orbit</em>.</p><p>Una vez que se confirme esta transacción, debería ver una notificación mostrando <code>Validator set changed!</code> la IU del portal. Una vez finalizado esto, haga clic en <code>Next</code> para continuar con el siguiente paso.</p><h2 id="h-86-paso-5-configure-el-publicador-de-lotes-de-la-cadena" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>8.6 Paso 5: Configure el publicador de lotes de la cadena.</strong></h2><p>Debería ver una sección llamada <code>Configure Batch Poster</code>, con un formulario que se ve así:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d6282514140a7e002e81ba08f4d64e5ee668f5bb9aa3904a9cdb34187e51744e.png" alt="https://docs.arbitrum.io/launch-orbit-chain/orbit-quickstart" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://docs.arbitrum.io/launch-orbit-chain/orbit-quickstart</figcaption></figure><p>Su dirección de publicación de lotes es responsable de publicar lotes de transacciones desde su cadena <em>Orbit</em> a sus contratos base en su cadena base. Se generará automáticamente una dirección para usted; su clave privada se generará automáticamente y se almacenará dentro de uno de los archivos de configuración <em>JSON</em> que se generarán en un momento.</p><p>Haga clic en <code>Submit</code> para emitir la transacción final de Arbitrum Goerli que configura la dirección del publicador de lotes especificado dentro de los contratos base de su cadena <em>Orbit</em>.</p><p>Una vez que se confirme esta transacción, debería ver una notificación que diga <code>Batch poster changed!</code> en la IU del portal.</p><p>Una vez concluido esto, haga clic en <code>Next</code> para continuar con el siguiente paso.</p><p><strong>NOTA:</strong> <em>Es importante aclarar que a partir de este punto, los siguientes pasos se encuentran en construcción y serán actualizados posteriormente en su debido momento.</em></p><h2 id="h-87-paso-6-descargue-los-archivos-de-la-chain-y-despliegue-de-la-misma" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>8.7 Paso 6: Descargue los archivos de la chain y despliegue de la misma.</strong></h2><p>Debería ver aparecer dos botones: <code>Download Rollup JSON</code> y <code>Download L3Config JSON</code>. Siga las instrucciones en la interfaz de usuario para descargar sus archivos de configuración e implementar su cadena <em>Orbit</em> localmente usando <em>Docker</em>.</p><ol><li><p><strong>Descargue Rollup JSON</strong>: Esto generará <code>nodeConfig.json</code>, que contiene la configuración del nodo de su cadena. Tenga en cuenta que esto incluye las claves privadas para su validador (<em>staker</em>) y el publicador de lotes, que se utilizan para firmar transacciones que publican <em>RBlocks</em> en los contratos base de su cadena en L2.</p></li><li><p><strong>Descargue L3Config JSON</strong>: Esto generará <code>orbitSetupScriptConfig.json</code>, que contiene la configuración de su cadena, incluida la que admite el contrato <em>Token Bridge</em>.</p></li></ol><h2 id="h-88-paso-7-clone-el-repositorio-de-scripts-de-configuracion-y-agregue-sus-archivos" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>8.8 Paso 7: Clone el repositorio de scripts de configuración y agregue sus archivos.</strong></h2><ol><li><p>Clone el repositorio <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/OffchainLabs/orbit-setup-script">orbit-setup-script</a>: <code>git clone https://github.com/OffchainLabs/orbit-setup-script.git</code></p></li><li><p>Mueva el archivo <code>nodeConfig.json</code> que se descargó dentro directorio de la <code>chain</code><strong><em>.</em></strong> En la raíz del repositorio <code>orbit-setup-script</code> clonado.</p></li><li><p>Mueva el archivo <code>orbitSetupScriptConfig.json</code> que descargó al directorio <code>config</code>. En la raíz del repositorio <code>orbit-setup-script</code> clonado.</p></li><li><p>Instale las dependencias ejecutándo <code>yarn install</code> desde la raíz del repositorio <code>orbit-setup-script</code>.</p></li></ol><h2 id="h-89-paso-8-ejecute-el-nodo-de-su-cadena-y-el-explorer" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>8.9 Paso 8: Ejecute el nodo de su cadena y el explorer.</strong></h2><p>Ejecute <em>Docker</em>, luego ejecúte <code>docker-compose up -d</code> desde la raíz del repositorio <code>orbit-setup-script</code>.</p><p>Se iniciará un nodo Nitro y una instancia del explorador <em>BlockScout</em>. Visite <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://localhost:4000/">http://localhost:4000/</a> para acceder a su instancia de explorador de <em>BlockScout</em>; esto le permitirá ver las transacciones y los bloques de su cadena, lo que puede ser útil para la depuración.</p><h2 id="h-810-paso-9-termine-de-configurar-su-la-chain" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>8.10 Paso 9: termine de configurar su la chain.</strong></h2><p>Hemos proporcionado un <em>script</em> <em>Hardhat</em> que maneja las siguientes tareas:</p><ol><li><p>Financiar las cuentas del publicador de lotes y validador (<em>staker</em>) en su cadena L2 subyacente.</p></li><li><p>Depositar ETH en su cuenta en la cadena utilizando el <em>bridge</em> recién implementado de su cadena.</p></li><li><p>Implementar sus Contratos <em>Token Bridge</em> tanto en L2 como en cadenas.</p></li><li><p>Configurar parámetros en la cadena.</p></li></ol><p>Para ejecutar este <em>script</em>, emita el siguiente comando desde la raíz del repositorio <code>orbit-setup-script</code>, reemplazando <code>OxYourPrivateKey</code> con la clave privada de la cuenta <code>Owner</code> que usó para implementar los contratos de su cadena y reemplazando <code>http://localhost:8449</code> con la URL RPC del nodo de su cadena.</p><p><code>PRIVATE_KEY=&quot;0xYourPrivateKey&quot; L2_RPC_URL=&quot;https://goerli-rollup.arbitrum.io/rpc&quot; L3_RPC_URL=&quot;http://localhost:8449&quot; yarn run setup</code></p><h2 id="h-felicitaciones" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>🎉¡Felicitaciones!</strong></h2><p>Ahora su <em>Orbit chain</em> está en funcionamiento. Podrá ver un archivo <code>outputInfo.json</code> en el directorio principal en la carpeta <em>script</em>. Este contiene información sobre la chain, incluyendo las direcciones de los contratos base de la misma.</p><hr><h2 id="h-9comandos-utiles" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>9.👨‍💻Comandos útiles.</strong></h2><h3 id="h-91-registros" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>9.1 Registros.</strong></h3><p>Ejecute el comando <code>docker-compose logs -f nitro</code> <strong><em>,</em></strong>  para poder ver los registros de la cadena.</p><h3 id="h-92-depositar-eth" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>9.2 Depositar ETH.</strong></h3><p>Si necesita depositar más ETH en su validador o en las direcciones del publicador de lotes, ejecute este comando en el directorio base del <em>script</em> de configuración, reemplazando <code>0xYourPrivateKey</code> y <code>&lt;AMOUNT&gt;</code>:</p><p><code>PRIVATE_KEY=&quot;0xYourPrivateKey&quot; L2_RPC_URL=&quot;https://goerli-rollup.arbitrum.io/rpc&quot; L3_RPC_URL=&quot;http://localhost:8449&quot; AMOUNT=&quot;&lt;AMOUNT&gt;&quot; yarn run deposit</code></p><h3 id="h-93-resolucion-de-problemas" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>9.3 Resolución de problemas.</strong></h3><p>Puede que se vea <code>error getting latest batch count</code> en los registros de salida de su nodo (Cuando se usa el comando de Registros). Por lo general, es seguro ignorarlo, ya que  se muestra cuando la implementación del contrato base de su cadena <em>Orbit</em> aún no ha finalizado en la cadena L1. Esta finalización puede demorar entre 15 y 20 minutos, pero no se preocupe: no es necesario que la implementación finalice en L1 para que su cadena funcione correctamente.</p><hr><h1 id="h-10conclusion" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>10.👩‍🎓Conclusión.</strong></h1><p>Arbitrum <em>Orbit</em> ofrece a los usuarios y desarrolladores una poderosa herramienta para crear sus propias cadenas Layer 3 (L3) en la infraestructura subyacente de las cadenas públicas de Capa 2 (L2) de Arbitrum. Estas &quot;cadenas Orbit&quot; proporcionan una mayor descentralización y permiten aprovechar las propiedades y supuestos de seguridad de la capa base de Ethereum.</p><p>Al permitir la configuración tanto como Arbitrum <em>Rollup</em> o <em>AnyTrust</em>, Arbitrum <em>Orbit</em> ofrece diversas posibilidades para los propietarios de las cadenas. Esto resuelve problemas relacionados con la alta demanda y congestión en Ethereum, brindando a los usuarios la capacidad de personalizar su privacidad, permisos, tarifas y gobernanza, entre otros aspectos.</p><p>La configuración y despliegue de una cadena <em>Orbit</em> se pueden realizar siguiendo una guía paso a paso, lo que facilita a los desarrolladores el proceso de creación y personalización de su propia cadena. Aunque algunos aspectos todavía están en construcción y serán actualizados en el futuro.</p><hr><h2 id="h-agradecimientos" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>🫂 Agradecimientos</strong></h2><p>🎉 ¡Gracias por leer hasta el final!🎉 Si está interesado en esta solución de escalabilidad te invitamos a revisar nuestra <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/39d63a8af9ca4524a7237b1f2456e745?v=95c70d362d8e4aae8007420ea6c827bc">biblioteca de Layer 2 en español</a>.</p><p>Si quieres conocer mas a fondo la tecnología detrás de Arbitrum te invitamos a leer estos artículos👇👇👇</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/L0YiPok0FymbnHZyA5GqbKL4OL0U4jBDwTuTGzD4PiE">https://mirror.xyz/layer2es.eth/L0YiPok0FymbnHZyA5GqbKL4OL0U4jBDwTuTGzD4PiE</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/InEgFG-fRvNv4LTIUSGp0vF9PTyl58AdqswqaYJYu3M">https://mirror.xyz/layer2es.eth/InEgFG-fRvNv4LTIUSGp0vF9PTyl58AdqswqaYJYu3M</a></p><p>Si quieren seguir aprendiendo y colaborando con nosotros, le invitamos a unirse a nuestra vibrante comunidad de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/l2espaniol">Telegram L2 en Español</a> y a seguirnos en nuestro <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://http/">Twitter L2 en Español</a>. Allí encontrará una gran cantidad de información sobre Layer 2 y el ecosistema de Blockchain en general. ¡Te Esperamos!</p>]]></content:encoded>
            <author>layer2es@newsletter.paragraph.com (L2 en Español)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/0c75a56159dd6d478212cdea374cb13294afa5cd471ac56be0e5b16f757ce365.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Arbitrum One vs Arbitrum Nova]]></title>
            <link>https://paragraph.com/@layer2es/arbitrum-one-vs-arbitrum-nova</link>
            <guid>64UvL5pn0VL2HzDKVvGq</guid>
            <pubDate>Tue, 25 Jul 2023 22:09:23 GMT</pubDate>
            <description><![CDATA[🔷 IntroducciónLa escalabilidad ha sido un desafío clave en la adopción masiva de las blockchains. A medida que la demanda de transacciones y creación de contratos inteligentes aumenta, se necesitan soluciones capaces de manejar un mayor volumen de operaciones sin comprometer la seguridad y la descentralización. En este sentido, Arbitrum One y Arbitrum Nova se han destacado como soluciones de escalabilidad prometedoras. En este artículo, compararemos estas dos implementaciones de Arbitrum y e...]]></description>
            <content:encoded><![CDATA[<h1 id="h-introduccion" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>🔷 Introducción</strong></h1><p>La <strong>escalabilidad</strong> ha sido un desafío clave en la adopción masiva de las blockchains. A medida que la demanda de transacciones y creación de contratos inteligentes aumenta, se necesitan soluciones capaces de manejar un <strong>mayor volumen</strong> de operaciones sin comprometer la <strong>seguridad</strong> y la <strong>descentralización</strong>.</p><p>En este sentido, <strong>Arbitrum One</strong> y <strong>Arbitrum Nova</strong> se han destacado como soluciones de escalabilidad prometedoras. En este artículo, compararemos estas dos implementaciones de Arbitrum y explicaremos sus características, similitudes y diferencias.</p><hr><h2 id="h-indice" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">📝 Índice</h2><ol><li><p><strong>Capas de una Blockchain.</strong></p><ol><li><p><em>Capa de ejecución (Execution Layer).</em></p></li><li><p><em>Capa de disponibilidad de datos (Data Availability Layer).</em></p></li><li><p><em>Capa de consenso (Consensus Layer).</em></p></li></ol></li><li><p><strong>Estructura.</strong></p></li><li><p><strong>Arbitrum One: Optimización de capa 2 para Ethereum.</strong></p></li><li><p><strong>Arbitrum Nova: Optimización de capa 2 para Ethereum con supuestos de confianza.</strong></p></li><li><p><strong>Similitudes y diferencias clave.</strong></p><ol><li><p><em>Seguridad Técnica.</em></p></li><li><p><em>Descentralización.</em></p></li><li><p><em>Desempeño.</em></p></li><li><p><em>Ecosistema.</em></p></li></ol></li><li><p><strong>Conclusión.</strong></p></li><li><p><strong>Agradecimientos.</strong></p></li></ol><hr><h1 id="h-1-capas-de-una-blockchain" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>1. 📚 Capas de una Blockchain</strong></h1><p>Para poder entender cómo están <strong>construidas</strong> Arbitrum One y Arbitrum Nova es necesario explicar cuáles son las capas de un blockchain</p><p>Para que un blockchain pueda funcionar necesita <strong>3</strong> Capas:</p><h3 id="h-11-capa-de-ejecucion-execution-layer" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>1.1 🛠 Capa de ejecución (<em>Execution Layer</em>)</strong></h3><p>Esta es donde se <strong>realizan</strong> las <strong>operaciones</strong> y se <strong>ejecutan</strong> los contratos inteligentes en una blockchain. Esta capa <strong>contiene el código</strong> y <strong>la lógica</strong> de las aplicaciones descentralizadas (<em>DApps</em>) que se ejecutan en la blockchain. Aquí es donde se <strong>procesan</strong> las transacciones y se realizan las operaciones específicas de cada blockchain, como transferencias de activos, intercambios o cualquier otra funcionalidad programable.</p><h3 id="h-12-capa-de-disponibilidad-de-datos-data-availability-layer" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>1.2 📑 Capa de disponibilidad de datos (<em>Data Availability Layer</em>)</strong></h3><p>Esta es la responsable de <strong>almacenar</strong> y <strong>distribuir</strong> los datos de la cadena de bloques. En esta capa, se almacenan todas las transacciones, bloques y otros elementos de datos necesarios para mantener el estado actual de la blockchain. La información almacenada en esta capa <strong>debe estar disponible</strong> y <strong>ser accesible</strong> para todos los participantes de la red. La capa de disponibilidad de datos garantiza <strong>la integridad</strong> y <strong>la transparencia</strong> de los datos en la blockchain.</p><h3 id="h-13-capa-de-consenso-consensus-layer" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>1.3 🤝 Capa de consenso (<em>Consensus Layer</em>)</strong></h3><p>La capa de consenso es fundamental para el funcionamiento de una blockchain, ya que es la <strong>encargada de lograr un acuerdo entre los nodos de la red sobre el estado actual de la blockchain</strong>. En esta capa, se determina qué transacciones son <strong>válidas</strong> y se alcanza el consenso sobre la versión autorizada de la blockchain. Los algoritmos de consenso, como Prueba de Trabajo (<strong><em>Proof of Work</em></strong>), Prueba de Participación (<strong><em>Proof of Stake</em></strong>) u otros mecanismos, se <strong>utilizan</strong> en esta capa para validar las transacciones y agregar nuevos bloques a la cadena.</p><hr><h2 id="h-2-estructura" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>2. 👨‍💻 Estructura</strong></h2><p>En una blockchain descentralizada como <strong>Ethereum</strong>, con las 3 capas explicadas anteriormente trabajan juntas, suele implicar un carga computacional grande, lo cual se refleja en <strong>altas comisiones</strong> y <strong>bajas velocidades</strong> de transacción.</p><p>Ahora bien, en una blockchain la <strong>mayoría de esta carga computacional corresponde a la capa de ejecución</strong>, es por ello que las soluciones de escalabilidad modulares como los <strong><em>rollups</em></strong>, toman esta capa de ejecución la <strong>separan</strong> fuera la cadena con el objetivo de reducir la carga computacional de red y así <strong>reducir los costos</strong> al mismo tiempo que se <strong>aumenta la velocidad</strong> y cantidad de transacciones por segundo (<strong>TPS</strong>). Por otro lado, la disponibilidad de datos y consenso son <strong>aseguradas en un capa base robusta</strong> como puede ser Ethereum.</p><p>Teniendo en cuenta todo esto, podemos decir que las capas de distribuyen de la siguiente manera:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/aff7fffd8c3ed9d09ec9ba7907f02db3e49c8eb443f3b022a327a8a0db54e16d.png" alt="https://www.youtube.com/watch?v=t7sPdoGp_KU&amp;list=LL&amp;index=7&amp;t=170s." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://www.youtube.com/watch?v=t7sPdoGp_KU&amp;list=LL&amp;index=7&amp;t=170s.</figcaption></figure><hr><h2 id="h-3-arbitrum-one-optimizacion-de-capa-2-para-ethereum" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>3. 🔵 Arbitrum One: Optimización de capa 2 para Ethereum</strong></h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/76829f85fcbe49a20ffd2f4decd6e3b0714ea988b019b558921c9ef7c4428a92.png" alt="https://logowik.com/arbitrum-one-logo-vector-55639.html." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://logowik.com/arbitrum-one-logo-vector-55639.html.</figcaption></figure><p>Arbitrum One es una implementación de capa 2 (layer 2) diseñada para abordar los problemas de escalabilidad en Ethereum. Es un <strong>Optimistic Rollup</strong>, cuya tecnología permite a los usuarios realizar transacciones fuera de la cadena principal de Ethereum. En lugar de ejecutar cada transacción en la blockchain principal de Ethereum, Arbitrum One <strong>agrupa varias transacciones en un solo rollo</strong> y las envía a la cadena principal para su <strong>validación</strong>. Este diseño ha demostrado tener un procesamiento <strong>más rápido y eficiente</strong>, al tiempo que mantiene la <strong>seguridad</strong> y la <strong>descentralización</strong> de la cadena de bloques subyacente, al menos desde el punto de vista teórico.</p><p>En esta solución, la <strong>capa de ejecución</strong> se encuentra dentro de la red de <strong>Arbitrum One</strong>, mientras que las <strong>capas de Disponibilidad de Datos y Consenso</strong> se encuentran en <strong>Ethereum</strong>. Se vería de la siguiente manera:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/77872bfd50890a601c91faca576bf3a66d6c51a0c8546051dfe202528c6c7a75.png" alt="Capas de Arbitrum One." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Capas de Arbitrum One.</figcaption></figure><p>Una de las principales ventajas de Arbitrum One es su <strong>compatibilidad nativa</strong> con Ethereum. Los desarrolladores pueden utilizar las <strong>mismas</strong> <strong>herramientas</strong> y <strong>contratos</strong> <strong>inteligentes</strong> que en la cadena principal de Ethereum sin necesidad de realizar cambios significativos. Además, Arbitrum One ofrece una <strong>alta capacidad de rendimiento</strong>, lo que permite procesar <strong>miles</strong> de transacciones por segundo. Esto significa que los usuarios pueden experimentar una experiencia <strong>similar</strong> a la cadena principal de Ethereum, pero con tiempos de confirmación más <strong>rápidos</strong> y <strong>costos</strong> <strong>reducidos</strong>.</p><p>Arbitrum One fue elaborada con el <strong>objetivo</strong> de dar soporte a <strong>proyectos</strong> <strong>asociados</strong> <strong>a</strong> <strong>DeFi</strong>, ya que, al tener las capas de disponibilidad de datos y consenso en Ethereum, está <strong>hereda</strong> <strong>la</strong> <strong>seguridad</strong> <strong>directamente</strong> <strong>de</strong> <strong>la</strong> <strong>misma</strong>, lo cual es necesario debido a que los proyectos DeFi generalmente manejan grandes cantidades de recursos económicos que deben ser asegurados de la mayor forma posible.</p><hr><h1 id="h-4-arbitrum-nova-optimizacion-de-capa-2-para-ethereum-con-supuestos-de-confianza" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>4. 🟠 Arbitrum Nova: Optimización de capa 2 para Ethereum con supuestos de confianza</strong></h1><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/05705cae8cc36deccab6f2cc035e7cf19dcfc75d18cb9c981459b36f3bbb3c31.png" alt="https://logowik.com/arbitrum-nova-logo-vector-55640.html" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://logowik.com/arbitrum-nova-logo-vector-55640.html</figcaption></figure><p>Por otro lado, Arbitrum Nova también aborda el problema de la escalabilidad en Ethereum de <strong>manera diferente</strong> que el enfoque de Arbitrum One. En esencia Arbitrum Nova es una <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://developer.arbitrum.io/inside-anytrust"><strong>Anytrust chain</strong></a> (un tipo de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://l2beat.com/scaling/projects/nova"><strong>Optimistic Chain</strong></a>, según L2Beat, y dentro de la categoría semi-L2, según <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/ng4uMLEKLPquP7ubRbJlE6IctNrFCkLUKBYlgnQEcbk">nuestra definición</a>) que busca también mejorar el rendimiento de la blockchain principal de Ethereum basándose en técnicas de <strong>reducción de carga</strong> a través de la ejecución de transacciones fuera de la cadena y la mejora de la <strong>eficiencia</strong> en el uso de la L1.</p><p>En esta versión, la <strong>capa de ejecución</strong> se encuentra dentro de la red <strong>Arbitrum Nova</strong>, por su parte el <strong>consenso</strong> está asegurado en <strong>Ethereum</strong> y la <strong>capa de disponibilidad de datos</strong> se encuentra controlada con un <strong>comité de disponibilidad de datos externo</strong> (o <strong>DAC</strong> por sus siglas en inglés). Actualmente, este comité se encuentra conformado por <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.arbitrum.foundation/state-of-progressive-decentralization#data-availability-committee-members"><strong>7 miembros</strong></a> al momento de redactar este artículo. Se vería de la siguiente manera:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6ce38a72ea091788c63878760b31a8875f4978b5dcdc8022e2894ca92605f603.png" alt="Capas de Arbitrum Nova." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Capas de Arbitrum Nova.</figcaption></figure><p>Una de las diferencias más destacadas de Arbitrum Nova radica en su <strong>menor consumo de recursos en la red de Ethereum</strong>. Esto se traduce en una <strong>reducción</strong> <strong>de los</strong> <strong>costos</strong> de las transacciones al ocupar <strong>menos espacio en Layer 1</strong>. Sin embargo, es importante tener en cuenta que este menor costo viene acompañado de <strong>un nivel de garantías de seguridad inferior</strong>, ya que como bien se menciona, ahora estas también recaen en el <strong>comité externo de disponibilidad de datos para su apropiado funcionamiento</strong>.</p><p>En cuanto a la capa de consenso, esta depende los <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://developer.arbitrum.io/das/daserver-instructions"><strong>Data Availability Certificates</strong></a> (o <strong>DACert</strong> por sus siglas en inglés) los cuales son publicado en la L1. Estos certificados contienen <strong>cierta información asociada a las transacciones</strong>, como por ejemplo, los hashs, el tiempo de expiracion o la prueba de que <strong>N-1</strong> miembros del comité han firmado o aprobado una transacción. Debido al supuesto de confianza 2 de N, el DACert constituye una prueba que de los datos del block estarán disponibles para al menos 1 miembros del comité honesto.</p><p>Es importante destacar que <strong>en el caso de que el secuenciador falle en recolectar firmas suficientes</strong>, luego de unos minutos, este abandonara la dependencia del comité, conviertiendose automaticamente en un rollup, el cual publicara toda la data directamente en la L1, como lo hace Arbitrum One.</p><p>Al igual que Arbitrum One, Arbitrum Nova también <strong>es compatible con la EVM de Ethereum</strong>, lo que facilita a los desarrolladores la adopción de la solución sin problemas.</p><p>En cuanto a la aplicación, Arbitrum Nova fue pensado en <strong>proyectos asociados a videojuegos, redes sociales  y NFTs</strong>, en donde <strong>no se busca un nivel de seguridad tan exhaustivo como en DeFi</strong>, pero permitiendo una <strong>gran velocidad</strong> y a un <strong>menor costo</strong>.</p><hr><h1 id="h-5-similitudes-y-diferencias-clave" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>5. 👩🏽‍🤝‍🧑🏻 Similitudes y diferencias clave</strong></h1><p>Aunque tanto <strong>Arbitrum One</strong> como <strong>Arbitrum Nova</strong> tienen como objetivo abordar la <strong>escalabilidad</strong> en Ethereum, existen algunas diferencias clave entre las dos soluciones.</p><h3 id="h-51-seguridad-tecnica" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.1👮‍♂️ Seguridad Técnica</h3><ul><li><p><strong>Tipo de Proving:</strong> Tanto Arbitrum One como Arbitrum Nova se usan las <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://developer.arbitrum.io/inside-arbitrum-nitro/#interactive-proving">fraud proofs interactivas</a> para poder resolver las disputas entre el retador y el validador.</p></li><li><p><strong>Tecnología</strong>: Arbitrum One utiliza el diseño de <strong><em>optimistic rollup</em></strong> para agrupar y procesar transacciones fuera de la cadena principal delegando la responsabilidad de la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/riUBdyBGEL30ggWNKy81WwvC8cynh_3oNpcbmwHNMms">disponibilidad de datos</a> a Ethereum, mientras que, Arbitrum Nova utiliza la tecnología <strong><em>Anytrust</em></strong> la cual asigna el control de la capa de disponibilidad de datos a un comité externo controlado por entidades aprobadas por la gobernanza de Arbitrum.</p></li><li><p><strong>Disponibilidad de datos</strong> En Arbitrum One, la capa de disponibilidad de datos se encuentra en <strong>Ethereum</strong>, lo que quiere decir que cualquiera puede participar en la validación de la cadena y garantizar su seguridad, es decir, <strong>1 de N</strong>. Por su parte Arbitrum Nova, utiliza supuestos de confianza, en donde se confía en un comité de disponibilidad de datos finito y que actuarán honestamente.</p><p>En un caso hipotético de que <strong>6</strong> de <strong>7</strong> miembros del comité y el Secuenciador se confabulen y empiecen a actuar maliciosamente, <strong>pueden romper la seguridad de la cadena</strong> (y, por ejemplo, robar los fondos de los usuarios); es aquí donde está el supuesto de confianza. Sin embargo, el Anytrust protocol <strong>posee un mecanismo</strong> en donde si <strong>2</strong> de <strong>7</strong> de los miembros del comité se comportan honestamente, la cadena AnyTrust cambiaría a &quot;<strong>modo Rollup</strong>&quot; automáticamente; es decir, que los datos se publican en L1.</p></li></ul><h3 id="h-52-descentralizacion" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.2 🧩 Descentralización</h3><ul><li><p><strong>Operadores:</strong> Actualmente Arbitrum One esta operado por 1 Secuenciador y <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.arbitrum.foundation/state-of-progressive-decentralization#arbitrum-one">13 Validadores</a> autorizados por una <strong>whitelist</strong>. Por otro lado, Arbitrum Nova se encuentra operado por 1 secuenciador, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.arbitrum.foundation/state-of-progressive-decentralization#data-availability-committee-members">7 miembros</a> de comité de disponibilidad de datos y <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.arbitrum.foundation/state-of-progressive-decentralization#arbitrum-nova">9 validadores</a> autorizados.</p></li><li><p><strong>Actualizable</strong>: Los contratos inteligentes (tanto para Arbitrum One como Arbitrum Nova) pueden ser actualizadas por la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://forum.arbitrum.foundation/">gobernanza de Arbitrum</a> o el <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.arbitrum.foundation/concepts/security-council#the-role-of-the-security-council">Security Council</a>. Esto implica que ambas arquitecturas pueden modificarse en un futuro, siendo útil para implementar mejoras y resolver bugs, pero supone un punto de centralización importante.</p></li></ul><h3 id="h-53-desempeno" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.3 📈 Desempeño</h3><ul><li><p><strong>Compatibilidad</strong>: Ambas soluciones <strong>son compatibles</strong> con Ethereum y permiten a los desarrolladores utilizar las mismas <strong>herramientas</strong> y <strong>desplegar</strong> contratos inteligentes tal y como suele hacerse en la red principal de Ethereum.</p></li><li><p><strong>Costos</strong>: Arbitrum One es mucho <strong>más caro</strong> que Arbitrum Nova, ya que utiliza más la red de Ethereum al tener las <strong>capas de consenso y disponibilidad de datos</strong> en la misma. Mientras que Arbitrum Nova <strong>solo utiliza Ethereum</strong> para asegurar el <strong>consenso</strong> nada más.</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f9ead128d6d15932e961efb2a8c522945d5a706135d5c18d2e877e317e5ca9a1.png" alt="Comparativa entre los costos de Arbitrum One y Arbitrum Nova." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Comparativa entre los costos de Arbitrum One y Arbitrum Nova.</figcaption></figure><h3 id="h-54-ecosistema" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.4 🌳 Ecosistema</h3><ul><li><p><strong>Aplicación:</strong> Arbitrum One fue diseñado para proyectos de <strong>DeFi</strong>, debido a su mayor seguridad. Mientras que Arbitrum Nova, fue desarrollado principalmente para <strong>juegos</strong>, <strong>redes</strong> <strong>sociales</strong> y <strong>NFTS</strong>, en donde la seguridad es importante pero no tan demandante como en DeFi.</p></li><li><p><strong>TPS actual</strong>: La TPS de Arbitrum se ajusta dependiendo del sistema de Arbitrum Nitro. Para Arbitrum One el TPS es de aproximadamente 5.18 y para Arbitrum Nova 1.4 (al momento de redactar este artículo).</p></li></ul><p>A Continuación, presentamos una tabla comparativa que resume todos los datos explicados anteriormente:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8d7af075f8c77709ca717ef6e14dcf6d64ec4486d178c2fcb6204d701936b062.png" alt="Arbitrum One vs Arbitrum Nova" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Arbitrum One vs Arbitrum Nova</figcaption></figure><hr><h2 id="h-6-conclusion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>6. 👨‍🎓 Conclusión</strong></h2><p>Tanto Arbitrum One como Arbitrum Nova son <strong>soluciones prometedoras</strong> para abordar el desafío de la escalabilidad en Ethereum. Arbitrum One ofrece una solución de capa 2 mediante la tecnología de los <strong><em>optimistic rollups</em></strong>. Es compatible con Ethereum y hereda la seguridad de la misma, lo cual es esencial para aquellos proyectos DeFi que manejan grandes cantidades de fondos y requieren una seguridad eficiente y robusta como pieza fundamental</p><p>Por su parte, Arbitrum Nova utiliza la tecnológica <strong><em>Anytrust</em></strong> la cual se enfoca en el uso de un <strong>comité de disponibilidad de datos</strong> para segurar la red. Arbitrum Nova tiene menos garantías de seguridad en comparación a Arbitrum One, pero tiene menores costos, lo cual es ideal para proyectos como juegos, redes sociales y NFTs, que <strong>no requieren una seguridad tan robusta como el DeFi</strong>.</p><p>La elección entre las dos soluciones <strong>dependerá</strong> <strong>de las</strong> <strong>necesidades</strong> y <strong>objetivos</strong> <strong>específicos</strong> de cada proyecto. Sin embargo, ambas opciones brindan mejoras significativas en términos de rendimiento y escalabilidad, allanando el camino para una adopción más amplia de las aplicaciones descentralizadas basadas en Ethereum.</p><hr><h2 id="h-agradecimientos" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>🫂 Agradecimientos</strong></h2><p>🎉 ¡Gracias por leer hasta el final!🎉 Si está interesado en esta solución de escalabilidad te invitamos a revisar nuestra <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/39d63a8af9ca4524a7237b1f2456e745?v=95c70d362d8e4aae8007420ea6c827bc">biblioteca de Layer 2 en español</a>.</p><p>Si quieres conocer mas a fondo la tecnología detrás de Arbitrum te invitamos a leer este artículo👇👇👇</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/L0YiPok0FymbnHZyA5GqbKL4OL0U4jBDwTuTGzD4PiE">https://mirror.xyz/layer2es.eth/L0YiPok0FymbnHZyA5GqbKL4OL0U4jBDwTuTGzD4PiE</a></p><p>Si quieren seguir aprendiendo y colaborando con nosotros, le invitamos a unirse a nuestra vibrante comunidad de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/l2espaniol">Telegram L2 en Español</a> y a seguirnos en nuestro <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://http/">Twitter L2 en Español</a>. Allí encontrará una gran cantidad de información sobre Layer 2 y el ecosistema de Blockchain en general. ¡Te Esperamos!</p>]]></content:encoded>
            <author>layer2es@newsletter.paragraph.com (L2 en Español)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/3e8f6eea7b9d9d813cc3f830099f667637539c744be0b370e1613575bea942f4.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Introducción al Optimistic Rollup de Arbitrum]]></title>
            <link>https://paragraph.com/@layer2es/introducci-n-al-optimistic-rollup-de-arbitrum</link>
            <guid>jkgeuZWtpf7IcOX4zmfp</guid>
            <pubDate>Wed, 19 Jul 2023 14:48:56 GMT</pubDate>
            <description><![CDATA[🔵IntroducciónEl Optimistic Rollup de Arbitrum es una solución de capa 2 diseñada para abordar los desafíos de escalabilidad de la red Ethereum. Arbitrum ofrece una forma más rápida y económica de realizar transacciones en Ethereum al aprovechar la técnica de los Optimistic Rollups. En este sistema, la mayoría de las operaciones se realizan fuera de la cadena principal (es decir fuera de mainnet ó off-chain), lo que permite aumentar la eficiencia y reducir los costos. En este artículo, explic...]]></description>
            <content:encoded><![CDATA[<h2 id="h-introduccion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🔵Introducción</h2><p>El <strong><em>Optimistic Rollup</em></strong> de Arbitrum es una solución de capa 2 diseñada para abordar los desafíos de escalabilidad de la red Ethereum. Arbitrum ofrece una forma más rápida y económica de realizar transacciones en Ethereum al aprovechar la técnica de los <em>Optimistic</em> <em>Rollups</em>.</p><p>En este sistema, la mayoría de las operaciones se realizan <strong>fuera de la cadena principal</strong> (<em>es decir </em><strong><em>fuera de</em></strong><em> </em><strong><em>mainnet</em></strong><em> ó </em><strong><em>off-chain</em></strong>), lo que permite aumentar la eficiencia y reducir los costos.</p><p>En este artículo, explicaremos en detalle qué es Arbitrum, cómo funciona su <em>rollup</em> optimista y cómo se lleva a cabo el proceso de transacciones en el mismo.</p><h2 id="h-indice" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Índice.</h2><ol><li><p><em>¿Qué es Arbitrum?.</em></p></li><li><p><em>¿Qué es un Rollup?.</em></p></li><li><p><em>¿Qué es un Optimistic Rollup?.</em></p></li><li><p><em>Ciclo de vida de una transacción en Arbitrum.</em></p></li><li><p><em>El Secuenciador.</em></p><ol><li><p><em>Flujo de trabajo del Secuenciador.</em></p></li><li><p><em>Core Inbox.</em></p></li><li><p><em>Caso Feliz/Común.</em></p></li><li><p><em>Caso Infeliz/Inusual.</em></p></li></ol></li><li><p><em>ArbOS.</em></p></li><li><p><em>Mensajes entre L1 Y L2.</em></p><ol><li><p><em>Contratos L1 pueden enviar transacciones a L2.</em></p></li><li><p><em>Transacciones basadas en tickets de L1 a L2.</em></p></li><li><p><em>Llamadas basadas en tickets de L2 a L1.</em></p></li></ol></li><li><p><em>Gas.</em></p></li><li><p><em>El límite de velocidad.</em></p></li><li><p><em>Tarifas.</em></p><ol><li><p><em>Tarifas de gas de L2.</em></p></li><li><p><em>Tarifas de calldata de L1.</em></p></li></ol></li><li><p><em>Nodos validadores.</em></p></li><li><p><em>Desafíos.</em></p><ol><li><p><em>Protocolo de Disección: Versión Simplificada.</em></p></li><li><p><em>¿Por qué la Disección Identifica Correctamente a un actor malicioso?.</em></p></li><li><p><em>El Protocolo Real de Disección.</em></p></li><li><p><em>Prueba de un Paso (One Step Proofs).</em></p></li><li><p><em>Eficiencia.</em></p></li></ol></li><li><p><em>Arbitrum Bridge.</em></p><ol><li><p><em>Depósito y Retiro de Ether (ETH).</em></p></li><li><p><em>Depósito y Retiro de ERC-20 tokens.</em></p></li><li><p><em>Tipo de Diseño.</em></p></li><li><p><em>Implementación canónica L2 por contrato de token L1.</em></p></li><li><p><em>Implementación del puente canónico de tokens.</em></p></li><li><p><em>Puente estándar por defecto.</em></p></li><li><p><em>Ejemplo: Depósito/retirada de Arb-ERC20 estándar.</em></p></li><li><p><em>La Gateway personalizada genérica de Arbitrum.</em></p></li><li><p><em>Configuración del token con la Gateway personalizada genérica</em></p></li></ol></li><li><p><em>Conclusión.</em></p></li></ol><h2 id="h-1que-es-arbitrum" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">1.🤷‍♂️¿Qué es Arbitrum?.</h2><p>Arbitrum es una solución de capa 2, creada por <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://offchainlabs.com/">OffChain Labs</a> para agregar escalabilidad a la red Ethereum. Esto significa que al utilizar Arbitrum, los usuarios pueden realizar transacciones en Ethereum de manera más rápida y económica</p><p>La plataforma se compone de dos redes diferentes: <strong>Arbitrum One</strong> y <strong>Arbitrum Nova</strong>. <strong>Arbitrum One</strong> es la red original enfocada en aplicaciones de finanzas descentralizadas (<strong><em>DeFi</em></strong>) y es la que utiliza la tecnología de los &quot;<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethereum.org/en/developers/docs/scaling/optimistic-rollups/#:~:text=An%20optimistic%20rollup%20is%20an,data%20to%20Mainnet%20as%20calldata%20."><strong>Optimistic Rollups</strong></a>” (<em>o “</em><strong><em>Rollups Optimistas</em></strong><em>”</em>).</p><p>Por otro lado, <strong>Arbitrum Nova</strong> está dirigida al mundo de los juegos descentralizados (GameFi) y las aplicaciones sociales. Mientras que <strong>Arbitrum One</strong> implementa el <strong>protocolo <em>Rollup</em></strong>, Arbitrum Nova implementa el protocolo <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://developer.arbitrum.io/inside-anytrust"><strong>AnyTrust</strong></a>. La diferencia clave entre los protocolos Rollup y AnyTrust es que este último introduce un <strong>supuesto de confianza adicional</strong> en forma de comité de disponibilidad de datos (<strong>DAC</strong>).</p><hr><h2 id="h-2que-es-un-rollup" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.⛓¿Qué es un Rollup?.</h2><p>Los <em>Rollups</em> son una solución de Capa 2 que <strong>agrupa</strong> o “<strong>enrolla</strong>” (<em>de allí viene su nombre</em>) los datos de varias transacciones y los transfiere fuera de la cadena principal (<em>es decir offchain</em>). En un <em>rollup</em>, la ejecución de las transacciones <strong>se realiza fuera de la cadena principal</strong>, mientras que los activos se mantienen en un <strong>contrato inteligente en la cadena</strong>. Una vez completada la transacción, los datos se envían de vuelta a la cadena principal.</p><p>Las principales ventajas que tiene este sistema son:</p><ol><li><p><strong>Eficiencia en transacciones</strong>: Los <em>rollups</em> permiten aumentar la eficiencia en el procesamiento de transacciones <strong>al agrupar múltiples transacciones en un solo bloque</strong>, lo que aumenta significativamente la <strong>capacidad de procesamiento de la blockchain</strong>. Esto resulta en una <strong>mayor velocidad</strong> de confirmación de las transacciones y una <strong>reducción de los costos</strong> de gas.</p></li><li><p><strong>Escalabilidad</strong>: Al trasladar gran parte de la carga de trabajo fuera de la cadena principal (<em>Capa 1</em>), los <em>rollups</em> permiten que la cadena de bloques maneje un <strong>mayor número de transacciones sin comprometer su rendimiento</strong>. Esto es especialmente importante en cadenas de bloques con alta demanda y congestión.</p></li><li><p><strong>Costos reducidos</strong>: Al realizar la mayor parte del procesamiento de transacciones fuera de la cadena principal, los <strong>rollups</strong> pueden <strong>reducir significativamente los costos</strong> asociados con las transacciones en la cadena de bloques. Esto hace que las transacciones sean más asequibles para los usuarios y fomenta la adopción masiva.</p></li><li><p><strong>Interoperabilidad</strong>: Los rollups pueden ser utilizados en diferentes cadenas de bloques, lo que permite la interoperabilidad entre ellas. Esto significa que los activos pueden <strong>moverse</strong> y ser <strong>utilizados</strong> en <strong>diferentes cadenas</strong> de bloques sin problemas, lo que amplía las posibilidades y casos de uso.</p></li><li><p><strong>Flexibilidad en las funcionalidades</strong>: Los <em>rollups</em> pueden implementar diferentes funcionalidades y características, como <strong>contratos inteligentes</strong>, <strong>sin necesidad de que estén soportadas directamente en la cadena de bloques principal</strong>. Esto permite una mayor flexibilidad y personalización en el desarrollo de aplicaciones descentralizadas (dApps).</p></li></ol><hr><h2 id="h-3que-es-un-optimistic-rollup" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3.✅¿Qué es un Optimistic Rollup?.</h2><p>En un <strong>Optimistic Rollup</strong>, la mayoría de las operaciones y cálculos se realizan fuera de la cadena principal (<em>Capa 1</em>), al igual que en otros tipos de Rollups. Sin embargo, los Rollups Optimistas utilizan un enfoque basado en la <strong>presunción de validez</strong> de las transacciones. Es decir se asume un <strong>ambiente</strong> o <strong>conducta</strong> <strong>optimista</strong> por parte de todos los participantes.</p><p>En lugar de verificar cada transacción de forma exhaustiva en la cadena principal, un <em>Rollup</em> Optimista permite que las transacciones <strong>se ejecuten</strong> y <strong>se incluyan rápidamente en la cadena de bloques</strong> de Layer 2. Sin embargo, <strong>en lugar de</strong> <strong>proporcionar</strong> <strong>pruebas criptográficas de validez</strong> en cada transacción, se confía en que los participantes actuaran correctamente y no intentaran realizar actividades maliciosas.</p><p>La verificación de las transacciones se realiza de manera <strong>retroactiva</strong> y <strong>periódica</strong>, generalmente a través de un mecanismo llamado &quot;<strong>periodo de desafío</strong>&quot; que dura <strong>7 días</strong>. Durante este período, cualquier participante de la cadena puede presentar una <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://support.token.im/hc/en-us/articles/9423185354265-What-is-Fraud-Proof-#:~:text=Fraud%20proof%20is%20a%20way,correct%2C%20or%20there%20is%20fraud."><strong>prueba de fraude</strong></a> en donde se <strong>compruebe</strong> que una transacción es inválida y así <strong>cuestionar</strong> su validez. Si esta prueba de fraude es aprobada, entonces se pueden aplicar <strong>sanciones</strong> o <strong>penalizaciones</strong> a los validadores involucrados que aprobaron la transacción errónea, como la <strong>pérdida de fondos</strong> o <strong>garantías depositadas</strong>.</p><p>De esta manera, se logra que los validadores de las transacciones se comporten de manera correcta, ya que en caso de ser descubiertos en actos maliciosos <strong>serán castigados retirándoles todos sus fondos stakeados</strong>.</p><hr><h2 id="h-4ciclo-de-vida-de-una-transaccion-en-arbitrum" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4.📝Ciclo de vida de una transacción en Arbitrum.</h2><ol><li><p>Las transacciones son recibidas por el <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://developer.arbitrum.io/inside-arbitrum-nitro/#the-sequencer"><strong>Secuenciador</strong></a>, quien las ordena para formar un lote de transacciones.</p></li><li><p>Luego este lote se publica en Ethereum dentro de un <strong>contrato inteligente en L1</strong>.</p></li><li><p>Después, un <strong>nodo validador</strong> leerá los datos de este lote y las procesa localmente en su copia del estado L2.</p></li><li><p>Una vez procesadas, se genera localmente <strong>un nuevo estado L2</strong> y el validador publicará esta <strong>nueva raíz de estado</strong> en un <strong>contrato inteligente en L1</strong>.</p></li><li><p>A continuación, todos los demás validadores <strong>procesarán las mismas transacciones</strong> en sus copias locales del estado L2 y compararán su raíz de estado L2 resultante con la original publicada en el <strong>contrato inteligente L1</strong>.</p></li><li><p>Los validadores tienen un período de tiempo determinado (<strong>7 días</strong>) para reportar cualquier <strong>fraude en la raíz de estado</strong>.</p></li><li><p>Si uno de los validadores <strong>obtiene</strong> una <strong>raíz de estado diferente</strong> a la publicada en L1, iniciará un <strong>desafío</strong>. El desafío requerirá que el <strong>retador</strong> y el <strong>validador</strong> que publicó la raíz de estado original se turnen para demostrar cuál <strong>debería ser la raíz de estado correcta</strong>.</p></li><li><p>El usuario que <strong>pierda el reto,</strong> <strong>perderá su depósito inicial</strong> (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://developer.arbitrum.io/inside-arbitrum-nitro/#staking"><strong><em>Stake</em></strong></a>). Mientras que, si la raíz de estado L2 original publicada que <strong>no era válida</strong>, será <strong>destruida</strong> por futuros validadores y <strong>no se incluirá</strong> en la cadena L2.</p></li><li><p>Por otro lado, <strong>si no se reporta fraude</strong> durante el período de tiempo determinado (<strong>7 días</strong>), el estado del <em>rollup</em> es considerado <strong>finalizado</strong> en su totalidad, habilitando al puente completar transacciones de retiro incluidas dentro del ciclo.</p></li></ol><p>En el siguiente diagrama se puede visualizar estos pasos:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c3607fc04dd62074bf521ef6c85a1e60eb355b77b83c91c678bf62b60d7824ee.png" alt="https://medium.com/privacy-scaling-explorations/a-technical-introduction-to-arbitrums-optimistic-rollup-860955ea5fec" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://medium.com/privacy-scaling-explorations/a-technical-introduction-to-arbitrums-optimistic-rollup-860955ea5fec</figcaption></figure><hr><h2 id="h-5el-secuenciador" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5.👮‍♂️El Secuenciador.</h2><p>El <em>Sequencer</em> (o Secuenciador) es un <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://developer.arbitrum.io/inside-arbitrum-nitro/#full-nodes"><strong>nodo completo</strong></a> de Arbitrum especialmente designado que, en condiciones normales, es responsable de enviar las transacciones de los usuarios a L1. En principio, el <strong><em>Sequencer</em></strong> de una cadena puede adoptar diferentes formas; tal como está configurado Arbitrum One actualmente, el Sequencer es una <strong>entidad única</strong> y <strong>centralizada</strong>; eventualmente, se podrían otorgar capacidades de secuenciación a un <strong>comité distribuido de secuenciadores</strong> que lleguen a un consenso sobre el orden. Sin embargo, independientemente de su forma, el <em>Sequencer</em> tiene una <strong>limitación fundamental</strong> que no se aplica a ninguna otra parte del sistema: <strong>debe operar bajo sus propias suposiciones de seguridad</strong>, es decir, en principio no puede obtener seguridad directamente desde la capa 1 (<em>en este caso Ethereum</em>). Esto plantea la pregunta de cómo Arbitrum mantiene su capacidad de resistencia a la censura en caso de que el <em>Sequencer</em> se comporte de manera incorrecta.</p><p>Por ello arbitrum <strong>creó una vía alterna</strong> que permite <strong>evitar por completo al Sequencer</strong> para enviar cualquier transacción de Arbitrum (<em>incluyendo una que, por ejemplo, inicie un mensaje de L2 a L1 para retirar fondos</em>) directamente desde la capa 1. Este mecanismo <strong>preserva la resistencia a la censura</strong> incluso si el <em>Sequencer</em> no <strong>responde en absoluto</strong> o incluso <strong>si actúa de manera maliciosa</strong>.</p><h3 id="h-51-flujo-de-trabajo-del-secuenciador" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.1 Flujo de trabajo del Secuenciador.</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3060120839128508a2345958ce0bacca7e405e087a3cc337d335f9329b7a517c.png" alt="https://developer.arbitrum.io/inside-arbitrum-nitro/#sequencing-followed-by-deterministic-execution" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://developer.arbitrum.io/inside-arbitrum-nitro/#sequencing-followed-by-deterministic-execution</figcaption></figure><p>Primero, el usuario crea una transacción, la firma utilizando su billetera y la envía al <em>Sequencer</em>. El trabajo del <em>Sequencer</em>, como su nombre indica, es tomar las transacciones que llegan, colocarlas en una <strong>secuencia ordenada</strong> y <strong>publicar</strong> esa secuencia.</p><p>Una vez que las transacciones están secuenciadas, se ejecutan a través de la <strong>función de transición de estado</strong>, una por una, en orden. La función de transición de estado toma como entrada el estado actual de la cadena (<em>saldos de cuentas, código de contrato, etc.</em>) junto con la siguiente transacción. Actualiza el <strong>estado</strong> y, a veces, <strong>emite un nuevo bloque</strong> de Capa 2 en la cadena.</p><p>Dado que el protocolo no confía en que el Sequencer no inserte basura en su secuencia, la función de transición de estado <strong>detectará</strong> y <strong>descartará cualquier transacción inválida</strong> (por ejemplo, mal formada) en la secuencia. Un <em>Sequencer</em> bien comportado <strong>filtrará las transacciones inválidas</strong> para que <strong>la función de transición de estado nunca las vea</strong>, lo que reduce los costos y mantiene bajas las tarifas de transacción. Sin embargo, este mecanismo seguirá funcionando correctamente independientemente de lo que el <em>Sequencer</em> incluya en su secuencia. (<em>Las transacciones en la secuencia están firmadas por sus remitentes, por lo que el Sequencer no puede crear transacciones falsificadas</em>).</p><p>La función de transición de estado es <strong>determinista</strong>, lo que significa que su comportamiento depende únicamente del <strong>estado actual</strong> y del <strong>contenido de la próxima transacción</strong>, y nada más. Debido a este determinismo, el resultado de una transacción <strong>T</strong> dependerá únicamente del estado inicial de la cadena, las transacciones anteriores a <strong>T</strong> en la secuencia y <strong>T</strong> misma.</p><p>Cualquier <strong>persona que conozca la secuencia</strong> de transacciones <strong>puede calcular la función de transición de estado por sí misma</strong>, y todas las <strong>partes honestas</strong> que lo hagan están garantizadas de <strong>obtener</strong> <strong>resultados idénticos</strong>. Esta es la forma normal en que operan los nodos en arbitrum: obtienen la secuencia de transacciones y ejecutan la función de transición de estado localmente. No se necesita un mecanismo de consenso para esto.</p><h3 id="h-52-core-inbox" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.2 Core Inbox.</h3><p>Cuando hablamos de &quot;<strong>enviar una transacción a una cadena de Arbitrum</strong>&quot;, nos referimos a incluirla en la <strong><em>Core Inbox</em></strong> de la cadena. Una vez que las transacciones se incluyen en la <em>Core Inbox</em>, su <strong>ordenamiento</strong> queda establecido, la ejecución es completamente <strong>determinista</strong> y podemos considerar el <strong>estado resultante como finalizado</strong> en el nivel L1. El rol del <em>Sequencer</em>, o su falta de él, se <strong>limita estrictamente a lo que ocurre antes</strong>, es decir, cómo una transacción que llega a la <em>Core Inbox</em>.</p><p>Hay <strong>dos posibles rutas</strong> que una transacción puede seguir en <strong>dos escenarios diferentes</strong>: cuando hay un <em>Sequencer</em> que funciona correctamente (<strong><em>Caso Feliz/Común</em></strong>) y cuando hay un Sequencer defectuoso (<strong><em>Caso Infeliz/Raro</em></strong>).</p><h3 id="h-53-caso-felizcomun" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>5.3 Caso Feliz/Común.</strong></h3><p><em>Sequencer</em> está activo y se comporta correctamente, partimos del supuesto de que el <em>Sequencer</em> está totalmente operativo y funciona con la intención de procesar las transacciones de los usuarios de la manera más segura y oportuna posible. El <em>Sequencer</em> puede recibir una transacción del usuario de dos formas: <strong>directamente mediante una solicitud RPC o a través de una L1 subyacente</strong>.</p><p>Si un usuario está enviando una transacción de Arbitrum &quot;<strong>estándar</strong>&quot; (<em>es decir, interactuando con una aplicación nativa de L2</em>), el usuario enviará la transacción firmada directamente al <em>Sequencer</em>, de manera similar a cómo un usuario envía una transacción a un nodo de Ethereum al interactuar con L1. Al recibirlo, el <em>Sequencer</em> lo ejecutará y entregará al usuario un <em>receipt</em> casi instantáneamente. Un corto tiempo después, generalmente no más de unos minutos, el Sequencer incluirá la transacción del usuario en un <strong><em>batch</em></strong> (<em>o</em> <strong><em>lote</em></strong> <em>en español</em>) y la publicará en L1 llamando a la función “<code>addSequencerL2Batch</code>” de la <em>Core Inbox</em>. Hay que destacar que <strong>solo el <em>Sequencer</em> tiene la autoridad para llamar a esta función</strong>; esta garantía de que ninguna otra parte puede incluir un mensaje directamente es, de hecho, lo que le da al <em>Sequencer</em> la capacidad única de proporcionar <em>receipts</em> instantáneos de &quot;<strong>confirmación suave</strong>&quot;. Una vez publicadas en un <em>batch</em>, las transacciones tienen finalidad a nivel de L1.</p><p><strong>Alternativamente</strong>, un usuario puede <strong>enviar su mensaje de L2 publicándolo en la L1 subyacente</strong>. Esta ruta es necesaria si el usuario desea realizar alguna operación en L1 junto con el mensaje de L2 y preservar la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://learn.radixdlt.com/article/what-is-atomic-composability#:~:text=Atomicity%20is%20the%20idea%20that,the%20entire%20transaction%20should%20fail.">atomicidad</a> entre ambos. El ejemplo típico aquí es un <strong>depósito de tokens</strong> a través de un <strong><em>bridge</em></strong> (<em>es decir, </em><strong><em>poner</em></strong><em> una garantía en </em><strong><em>L1</em></strong><em>, y se </em><strong><em>mintearla</em></strong><em> en </em><strong><em>L2</em></strong>). El usuario lo hace publicando una transacción de L1 (<em>es decir, enviando una transacción normal a un nodo de L1</em>) que llama a uno de las funciones relevantes en el contrato <em>Inbox</em>, por ejemplo, “<code>sendUnsignedTransaction</code>”. Esto agrega un mensaje a lo que llamaremos <strong><em>delayed inbox</em></strong> (<em>representada por</em> <code>delayedInboxAccs</code> <em>en el contrato Bridge</em>), que es efectivamente <strong>una cola</strong> <strong>en la que los mensajes esperan</strong> antes de ser movidos a la <em>Core Inbox</em>. El <em>Sequencer</em> emitirá un <em>receipt</em> de L2 aproximadamente <strong>10 minutos</strong> después de que la transacción se haya incluido en la <em>delayed inbox</em> (<em>el motivo de este retraso es minimizar el riesgo de reorganizaciones tanto en L1 como en L2 que pueden invalidar los receipt de L2 del Sequencer</em>). Nuevamente, el último paso es que el <em>Sequencer</em> incluya el mensaje de L2 en un <em>batch</em>, especificando cuántos mensajes de la <em>delayed inbox</em> se deben incluir, finalizando así la transacción.</p><p>En resumen, en cualquiera de los <strong>casos felices</strong>, el usuario primero entrega su mensaje al <em>Sequencer</em>, <strong>el cual se asegura de que llegue a la <em>Core Inbox</em></strong>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d3e5935eb9dc2e9ed0c0fbbf516b4cb26964ab1d80b840bee6fd363dd7b055e5.png" alt="https://developer.arbitrum.io/sequencer#happycommon-case-sequencer-is-live-and-well-behaved" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://developer.arbitrum.io/sequencer#happycommon-case-sequencer-is-live-and-well-behaved</figcaption></figure><h3 id="h-54-caso-infelizinusual" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5.4 Caso Infeliz/Inusual.</h3><p>Supongamos ahora que el <em>Sequencer</em>, por alguna razón, <strong>no está llevando a cabo su tarea de enviar mensajes</strong>. Aún así, un usuario puede <strong>lograr</strong> que su transacción se incluya en <strong>dos</strong> pasos:</p><p><strong>Primero</strong>, envía su mensaje de L2 a través de L1 a la <strong><em>delayed inbox</em></strong> como se describió anteriormente. Es importante destacar que, aunque los mensajes atómicos (<em>es decir, mensajes rápidos</em>) entre cadenas son el caso común para usar la <em>delayed inbox</em>, en principio se <strong>puede utilizar</strong> para enviar <strong>cualquier</strong> <strong>mensaje</strong> de L2.</p><p>Una vez en la <em>delayed inbox</em>, obviamente no podemos confiar en el <em>Sequencer</em> para incluir la transacción en un lote. En su lugar, podemos utilizar la función “<code>forceInclusion</code>” de la <em>Core Inbox</em>. Una vez que un mensaje ha estado en la <em>delayed inbox</em> durante un tiempo suficiente, se puede llamar a <code>forceInclusion</code> para moverlo de la <em>delayed inbox</em> a la <em>Core Inbox</em>, momento en el cual se finaliza. Es crucial destacar que <strong>cualquier cuenta usuario puede llamar a la función “</strong><code>forceInclusion</code><strong>”</strong>.</p><p>Actualmente, en Arbitrum One, el tiempo de retraso entre el envío y la inclusión forzada es aproximadamente de <strong>24 horas</strong>. Una inclusión forzada desde L1 <strong>afectaría</strong> directamente el <strong>estado</strong> de cualquier transacción de L2 <strong>no confirmada</strong>; al mantener un valor de retraso alto de manera conservadora, se asegura que <strong>solo se utilice en circunstancias extraordinarias</strong>. Además del retraso en sí, la ruta de inclusión forzada tiene la <strong>desventaja</strong> de la incertidumbre en cuanto al ordenamiento de las transacciones. Mientras se espera a que pase el retraso máximo de un mensaje, un <em>Sequencer</em> malintencionado podría, en principio, publicar directamente mensajes delante de él. Sin embargo, en última instancia, no hay nada que el <em>Sequencer</em> pueda hacer para evitar que se incluya en la <strong><em>Core Inbox</em></strong>, momento en el cual se fija su ordenamiento.</p><p>Si bien la ruta lenta e &quot;infeliz&quot; <strong>no es óptima</strong> y rara vez, o nunca, debería ser necesaria, su <strong>disponibilidad como opción garantiza que el <em>Rollup</em> de Arbitrum siempre preserve su modelo de seguridad <em>trustless</em></strong>, incluso si las partes con permisos del sistema se comportan de manera defectuosa.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/504df1cae8f39b20be183f955a880bb6a89db7e01be5d8817718fe6a317cd6d0.png" alt="https://developer.arbitrum.io/sequencer#unhappyuncommon-case-sequencer-isnt-doing-its-job" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://developer.arbitrum.io/sequencer#unhappyuncommon-case-sequencer-isnt-doing-its-job</figcaption></figure><hr><h2 id="h-6arbos" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">6.💻ArbOS.</h2><p>El ArbOS es un <strong>componente confiable</strong> que actúa como un &quot;<strong>pegamento del sistema</strong>&quot; que se ejecuta en la Capa 2 como parte de la <strong>Función de Transición de Estado</strong>. ArbOS está diseñado para proporcionar funciones necesarias para un sistema de Capa 2, como la comunicación entre cadenas, la contabilidad de recursos y la economía de tarifas relacionadas con la Capa 2, y la gestión de cadenas.</p><p>El ArbOS existe principalmente porque tiene la <strong>capacidad de realizar de manera confiable, rápida y económica una gran parte del trabajo que anteriormente se realizaba en la Capa 1</strong> (<em>L1</em>). El soporte de estas funciones en un <strong>software confiable</strong> de Capa 2, en lugar de <strong>incorporarlas</strong> <strong>en las reglas impuestas por la Capa 1</strong>, como lo hace Ethereum, ofrece <strong>ventajas</strong> significativas en <strong>costos</strong>, ya que estas operaciones pueden beneficiarse del <strong>menor costo</strong> de cómputo y <strong>almacenamiento</strong> en la Capa 2, en lugar de tener que gestionar esos recursos como parte de un contrato de Capa 1.</p><p>Tener un sistema operativo confiable en la Capa 2 también tiene <strong>ventajas</strong> significativas en <strong>flexibilidad</strong>, ya que el código de la Capa 2 es <strong>más fácil de evolucionar</strong> o <strong>personalizar</strong> para una cadena en particular, en comparación con una arquitectura impuesta por la Capa 1.</p><hr><h2 id="h-7mensajes-entre-l1-y-l2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">7.🎫Mensajes entre L1 Y L2.</h2><h3 id="h-71-contratos-l1-pueden-enviar-transacciones-a-l2" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">7.1 Contratos L1 pueden enviar transacciones a L2</h3><p>Un contrato en <strong>L1</strong> tiene la <strong>capacidad de enviar una transacción</strong> a <strong>L2</strong> de forma similar a un usuario, utilizando la llamada al contrato &quot;<em>inbox</em>&quot; en la cadena de Ethereum. Sin embargo, el <strong>resultado</strong> de esta transacción de L2 <strong>no estará disponible</strong> para el llamador en L1. Aunque la transacción se <strong>ejecutará</strong> <strong>en L2</strong>, el llamador en L1 <strong>no podrá ver los resultados</strong>.</p><p>La ventaja de este enfoque es su <strong>simplicidad</strong> y <strong>baja latencia</strong>. No obstante, la <strong>desventaja</strong>, en comparación con el otro método que se describirá pronto, es que la transacción de L2 podría <strong>revertirse</strong> si el llamador en L1 <strong>no especifica correctamente</strong> el <strong>precio</strong> <strong>del</strong> <strong>gas</strong> y la <strong>cantidad máxima de gas</strong> de L2. Dado que el llamador en L1 no puede ver el resultado de la transacción de L2, <strong>no puede estar seguro</strong> de que la transacción en L2 será <strong>exitosa</strong>.</p><p>Este escenario puede generar problemas significativos para ciertos tipos de interacciones entre L1 y L2. Por ejemplo, consideremos una transacción que involucra el <strong>depósito de un token en L1</strong> para que esté disponible en una <strong>dirección de L2</strong>. Si la <strong>parte en L1 tiene éxito</strong> pero la <strong>parte en L2 se revierte</strong>, los tokens enviados al contrato &quot;<em>inbox</em>&quot; en L1 <strong>no se pueden recuperar</strong> ni en <strong>L2</strong> ni en <strong>L1</strong>. Esta situación es claramente indeseable.</p><h3 id="h-72-transacciones-basadas-en-tickets-de-l1-a-l2" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">7.2 Transacciones basadas en tickets de L1 a L2.</h3><p>Afortunadamente, existe un método alternativo para las llamadas de L1 a L2 que es <strong>más robusto ante problemas relacionados con el gas</strong>. Este método utiliza un sistema <strong>basado en tickets</strong>.</p><p>La idea principal es que un contrato de L1 puede enviar una transacción &quot;<strong>reintentable</strong>&quot; a la cadena. La cadena intentará ejecutar esta transacción y, <strong>si tiene éxito</strong>, <strong>no se requerirá ninguna acción adicional</strong>. Sin embargo, <strong>si la transacción falla</strong>, se generará un &quot;<strong><em>ticketID</em></strong>&quot; que <strong>identifica esa transacción fallida</strong>. Posteriormente, <strong>cualquier persona</strong> puede llamar a un <strong>contrato especial</strong> precompilado en L2, <strong>proporcionando el <em>ticketID</em></strong>, con el fin de intentar <strong>redimir el ticket</strong> y <strong>volver a ejecutar la transacción</strong>.</p><p>Cuando se guarda una transacción para <strong>reintentar</strong>, se registra la <strong>dirección del remitente</strong>, la <strong>dirección de destino</strong>, el <strong>valor</strong> y los <strong>datos de la llamada</strong>. Todos estos detalles se almacenan, y el valor de la llamada se <strong>deduce</strong> de la cuenta del remitente y se &quot;<strong>adjunta</strong>&quot; lógicamente a la transacción guardada. <strong>Si el</strong> <strong>redimir tiene éxito</strong>, la transacción se completa, se emite un <strong>recibo</strong> y el <strong><em>ticketID</em> se cancela</strong>, quedando inutilizable. Sin embargo, si el <strong>redimir falla</strong>, por ejemplo, porque la transacción empaquetada falla, se <strong>informará</strong> del fallo del redimir y el <strong><em>ticketID</em> seguirá disponible para su redención</strong>.</p><p>Normalmente, el remitente original intentará que su transacción tenga éxito de inmediato, por lo que nunca será necesario <strong>registrarla</strong> ni <strong>reintentarla</strong>. Por ejemplo, en el caso de nuestro ejemplo de &quot;<strong>depósito de tokens</strong>&quot;, en la situación ideal y común, solo se requerirá una única firma del usuario. Si esta ejecución inicial falla, el <em>ticketID</em> seguirá existiendo <strong>como una medida de respaldo</strong> que otros pueden redimir más adelante.</p><p>El envío de una transacción de <strong>esta manera</strong> tiene un costo en <strong>ETH</strong> que el remitente debe <strong>pagar</strong>, y este costo <strong>varía</strong> según el <strong>tamaño</strong> de los datos de la llamada de la transacción. Una vez enviada, el ticket es válido durante aproximadamente <strong>una semana</strong>. Si el ticket no se ha redimido durante ese período, <strong>se</strong> <strong>eliminará</strong>.</p><p>Cuando se <strong>redime</strong> el ticket, la transacción preempaquetada se <strong>ejecuta</strong> con el <strong>remitente</strong> y el <strong>origen</strong> siendo iguales al <strong>remitente original</strong>, y con el <strong>destino</strong>, el <strong>valor</strong> y los <strong>datos</strong> de la llamada proporcionados por el remitente en el momento del envío.</p><p>Este mecanismo es un poco <strong>más</strong> <strong>complejo</strong> que las transacciones habituales de L1 a L2, pero tiene la <strong>ventaja</strong> de que el <strong>costo</strong> de envío es <strong>predecible</strong> y el <strong>ticket</strong> estará siempre disponible para su redención si se paga el costo de envío. Mientras <strong>haya algún usuario</strong> dispuesto a <strong>redimir</strong> el ticket, la transacción de L2 podrá ejecutarse eventualmente y no se perderá de forma silenciosa.</p><h3 id="h-73-llamadas-basadas-en-tickets-de-l2-a-l1" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">7.3 Llamadas basadas en tickets de L2 a L1.</h3><p>Las llamadas de L2 a L1 <strong>operan de manera similar</strong>, utilizando un sistema basado en <strong>tickets</strong>. Cuando un contrato de L2 desea enviar una transacción a L1, puede llamar a una función del contrato precompilado <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://developer.arbitrum.io/arbos/precompiles#arbsys"><strong>ArbSys</strong></a>. Después de que la transacción de L2 se <strong>confirma</strong> y se <strong>ejecuta</strong> en L1 (<em>por lo general, después de algunos días</em>), se <strong>genera un ticket</strong> en el contrato de salida (<em>outbox</em>) de L1. Cualquier persona puede activar este ticket llamando a una <strong>función específica</strong> del contrato de salida de L1 y proporcionando el <strong>ID del ticket</strong> correspondiente. El ticket se marca como <strong>redimido</strong> <strong>sólo si la transacción de L1 se completa sin revertirse</strong>.</p><p>Estos tickets de L2 a L1 <strong>no tienen una limitación de tiempo</strong> y permanecen válidos hasta que se redimen exitosamente. <strong>No se requiere ningún pago de almacenamiento</strong>, ya que los tickets (<em>representados por un hash en Merkle tree de tickets</em>) se registran en el almacenamiento de Ethereum, el cual no implica ningún costo de almacenamiento. Los gastos asociados con el almacenamiento de las raíces de Merkle de los tickets <strong>están cubiertos por las tarifas de transacción de L2</strong>.</p><hr><h2 id="h-8gas" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">8.⛽Gas.</h2><p><strong>NitroGas</strong> (<em>llamado así para evitar confusiones con el gas de Ethereum en la Capa 1</em>) se utiliza en Arbitrum para <strong>rastrear el costo de ejecución</strong> en una cadena Nitro. Funciona de manera similar al gas en Ethereum, en el sentido de que <strong>cada instrucción EVM</strong> <strong>tiene un costo de gas</strong> igual al que tendría en Ethereum.</p><hr><h2 id="h-9el-limite-de-velocidad" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">9.🛑El límite de velocidad.</h2><p>La seguridad de las cadenas Nitro depende de la suposición de que cuando un validador crea un <strong><em>RBlock</em></strong> (es decir un <em>block</em> en el <em>Rollup</em>), otros validadores lo verificarán y responderán con un <em>RBlock</em> correcto y un desafío si está equivocado. Esto requiere que los demás validadores <strong>tengan el tiempo</strong> y <strong>los recursos necesarios para verificar cada <em>RBlock</em> lo suficientemente rápido como para emitir un desafío oportuno</strong>. El protocolo Arbitrum tiene esto en cuenta al establecer plazos para los <em>RBlocks</em>.</p><p>Esto establece un límite de velocidad efectivo en la ejecución de una cadena Nitro: a largo plazo, <strong>la cadena no puede avanzar más rápido de lo que un validador puede emular su ejecución</strong>. Si los <em>RBlocks</em> se publican a una velocidad más rápida que el límite de velocidad, sus plazos se alejarán cada vez más en el futuro. Debido al límite, impuesto por los contratos del protocolo de <em>rollup</em>, de cuán lejos en el futuro puede estar un plazo, esto eventualmente ralentizará los nuevos <em>RBlocks</em>, lo que impondrá el límite de velocidad efectivo.</p><p><strong>Poder establecer el límite de velocidad de manera precisa depende de poder estimar el tiempo requerido para validar un <em>RBlock</em></strong>, con cierta precisión. Cualquier incertidumbre en la estimación del tiempo de validación nos obligará a <strong>establecer un límite de velocidad más bajo para estar seguros</strong>. Y no queremos establecer un límite de velocidad más bajo, así que tratamos de permitir una estimación precisa.</p><hr><h2 id="h-10tarifas" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">10.💸Tarifas.</h2><p>Las transacciones de los usuarios pagan tarifas para cubrir el costo de operar la cadena. Estas tarifas son <strong>evaluadas</strong> y <strong>recolectadas</strong> por <strong>ArbOS</strong> en L2. Están denominadas en ETH. Se cobran tarifas por dos recursos que una transacción puede utilizar:</p><h3 id="h-101-tarifas-de-gas-de-l2" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">10.1 Tarifas de gas de L2.</h3><p>Las tarifas de gas de L2 funcionan de manera muy <strong>similar</strong> al gas en Ethereum. Una transacción utiliza <strong>una cierta cantidad de gas</strong>, y esto <strong>se multiplica</strong> por la tarifa base de L2 para obtener la tarifa de gas de L2 cobrada a la transacción.</p><p>La tarifa base de L2 se establece mediante una versión del &quot;<strong>mecanismo exponencial</strong>&quot; que se ha discutido ampliamente en la comunidad de Ethereum y que se ha demostrado equivalente al mecanismo de fijación de precios de gas <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://academy.bit2me.com/que-es-eip-1559/"><strong>EIP-1559</strong></a> de Ethereum.</p><p>El algoritmo compara el uso de gas con un parámetro llamado &quot;<strong>límite de velocidad</strong>&quot;, que es la <strong>cantidad objetivo de gas por segundo</strong> que la cadena puede manejar de manera sostenible a lo largo del tiempo. (<em>Actualmente, el límite de velocidad es de 7 millones de gas por segundo</em>). El algoritmo realiza un seguimiento de un saldo de gas pendiente. Cada vez que una <strong>transacción consume gas</strong>, ese gas <strong>se agrega al saldo pendiente</strong>. Cada vez que el reloj <strong>avanza un segundo</strong>, se <strong>resta el límite de velocidad del saldo pendiente</strong>, pero el saldo pendiente <strong>nunca puede ser inferior a cero</strong>.</p><p>De manera intuitiva, <strong>si el saldo pendiente aumenta</strong>, el algoritmo debe <strong>aumentar el precio del gas para reducir el uso de gas</strong>, porque el uso está por encima del nivel sostenible. Si el saldo <strong>pendiente disminuye</strong>, el precio <strong>debería disminuir</strong> nuevamente porque el uso ha estado por debajo del límite sostenible, por lo que se puede dar la bienvenida a un <strong>mayor uso de gas</strong>.</p><p>Para hacer esto más preciso, la tarifa base es <strong>una función exponencial</strong> del saldo pendiente, <strong>F = exp(-a(B-b))</strong>, donde <strong>a</strong> y <strong>b</strong> son constantes adecuadamente elegidas: <strong>“a”</strong> controla la rapidez con la que el precio aumenta con el saldo pendiente, y <strong>“b”</strong> permite un saldo pendiente pequeño antes de que comience la escalada de la tarifa base.</p><h3 id="h-102-tarifas-de-calldata-de-l1" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">10.2 Tarifas de calldata de L1.</h3><p>Las tarifas de calldata de L1 se <strong>aplican sólo si una transacción entra en L2 a través del <em>Sequencer</em></strong> (<em>es decir, no se recibe a través de una transacción L2 a L2</em>). Estas tarifas se pagan al <em>Sequencer</em> y cubren los costos de operar el <em>Sequencer</em> y mantener la sincronización con L1.</p><p>La tarifa se basa en el <strong>tamaño</strong> del <em>calldata</em> de L1 de la transacción. Hay una <strong>tarifa base por unidad de <em>calldata</em></strong>, y la tarifa total <strong>se calcula multiplicando la tarifa base por el tamaño del calldata</strong>.</p><p>Es importante tener en cuenta que estas tarifas <strong>no se pagan a los validadores de L2</strong>. Los validadores reciben recompensas de validación <strong>separadas que provienen del contrato <em>ArbRewarder</em></strong> y están diseñadas para incentivar la validación en lugar de las tarifas de transacción.</p><hr><h2 id="h-11nodos-validadores" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">11.🕵️‍♂️Nodos validadores.</h2><p>Algunos nodos de Arbitrum optarán por actuar como <strong>validadores</strong>. Esto significa que <strong>supervisan</strong> el progreso del protocolo de <em>rollup</em> y <strong>participan</strong> en ese protocolo para avanzar el estado de la cadena de manera segura.</p><p>No todos los nodos elegirán hacer esto. Debido a que el protocolo de <strong><em>rollup</em> no decide lo que hará la cadena</strong>, sino que simplemente confirma el comportamiento correcto que está completamente determinado por los mensajes del <em>inbox</em>, <strong>un nodo puede ignorar el protocolo de <em>rollup</em></strong> <strong>y simplemente calcular por sí mismo el comportamiento correcto.</strong></p><p>Cada validador puede elegir <strong>su propio enfoque</strong>, pero esperamos que los validadores sigan <strong>tres</strong> estrategias comunes:</p><p>La estrategia del <strong>validador activo</strong> intenta avanzar el estado de la cadena <strong>proponiendo nuevos <em>RBlocks</em></strong>. Un validador activo siempre tiene un <strong><em>stake</em></strong>, ya que crear un <em>RBlock</em> requiere tener uno. Una cadena realmente sólo necesita un <strong>validador activo honesto</strong>; tener más es un uso ineficiente de recursos. Para la cadena Arbitrum One, Offchain Labs ejecuta un validador activo.</p><p>La estrategia del <strong>validador defensivo</strong> observa el funcionamiento del protocolo de <em>rollup</em>. Si solo se proponen <em>RBlocks</em> correctos, esta estrategia <strong>no realiza <em>stake</em></strong>. Pero <strong>si se propone un <em>RBlock</em> incorrecto</strong>, esta estrategia interviene publicando un <strong><em>RBlock</em> correcto o haciendo <em>stake</em> en un <em>RBlock</em> correcto</strong> que otra parte haya publicado. Esta estrategia evita los <em>stakes</em> cuando las cosas van bien, pero si alguien es deshonesto, realiza una <em>stake</em> para <strong>defender el resultado correcto</strong>.</p><p>La estrategia del <strong>validador de vigilancia</strong> <strong>nunca realiza stakes</strong>. Simplemente observa el protocolo de <em>rollup</em> y <strong>si se propone un RBlock incorrecto</strong>, <strong>da la alarma</strong> (<em>por los medios que elija</em>) para que otros puedan intervenir. Esta estrategia asume que otras partes disponibles a hacer <em>stake</em> estarán dispuestas a intervenir para tomar parte de la apuesta del proponente deshonesto, y que esto puede suceder antes de que expire el plazo del <em>RBlock</em> deshonesto.</p><p>(<em>En la práctica, esto permitirá varios días para una respuesta</em>).</p><p>En condiciones normales, los validadores que utilizan las estrategias <strong>defensivas</strong> y de <strong>vigilancia</strong> <strong>no harán nada más que observar</strong>. Un <strong>actor malicioso</strong> que esté considerando hacer <strong>trampa</strong> <strong>no podrá saber cuántos validadores defensivos y de vigilancia están operando de incógnito</strong>. Quizás algunos validadores <strong>defensivos se anuncien</strong>, pero otros probablemente <strong>no lo hagan</strong>, por lo que un posible atacante siempre tendrá que <strong>preocuparse</strong> de que los defensores estén <strong>esperando para aparecer</strong>.</p><hr><h2 id="h-12desafios" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">12.⚔Desafíos.</h2><p>Para poder entender cómo funciona el sistema de desafíos en arbitrum, usaremos el siguiente ejemplo:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5890bdf7b1ed75af37d77c1ae1ce12618892c595bb809958cac1f61b0fdf2ea1.png" alt="https://developer.arbitrum.io/inside-arbitrum-nitro/#challenges" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://developer.arbitrum.io/inside-arbitrum-nitro/#challenges</figcaption></figure><p>Los <em>RBlocks</em> <strong>93</strong> y <strong>95</strong> son hermanos (<em>ambos tienen </em><strong><em>92</em></strong><em> como predecesor</em>). Alice tiene un <em>stake</em> en el <em>Rblock</em> 93 y Bob tiene una <em>stake</em> en el <em>Rblock</em> 95.</p><p>En este punto, sabemos que Alice y Bob <strong>no están de acuerdo</strong> sobre la corrección del <strong><em>RBlock</em> 93</strong>, ya que <strong>Alice está convencida de que el 93 es correcto</strong>, mientras que <strong>Bob está convencido de que el 93 es incorrecto</strong>. (<em>Bob tiene una stake en el bloque 95, que implícitamente afirma que el 92 es el último RBlock correcto antes que él, lo que implica que el 93 debe ser incorrecto</em>).</p><p>Cuando dos participantes tienen <em>stakes</em> en <em>RBlocks</em> hermanos y ninguno de ellos está desafiando actualmente, <strong>cualquier persona puede iniciar un desafío entre los dos</strong>. El protocolo de agregación de transacciones <strong>registrará el desafío</strong> y <strong>actuará como árbitro</strong>, declarando eventualmente un <strong>ganador</strong> y <strong>confiscando el <em>stake</em> del perdedor</strong>. El perdedor será <strong>eliminado</strong> como <em>staker</em>.</p><p>El desafío es un juego en el que Alice y Bob se turnan para hacer movimientos, con un contrato de Ethereum como <strong>árbitro</strong>. Alice, como <strong>defensora</strong>, comienza primero.</p><p>El juego consta de <strong>dos</strong> fases: <strong>El protocolo de disección</strong> y <strong>prueba de un solo paso</strong> (<em>o one-step proof en inglés</em>). La fase de disección <strong>reducirá el tamaño de la disputa hasta que se trate de una disputa sobre una sola instrucción de ejecución.</strong> Luego, la prueba de un solo paso <strong>determinará quién tiene razón en esa instrucción en particular</strong>.</p><p>Describiremos <strong>dos</strong> veces la parte de la disección del protocolo. Primero, explicaremos una <strong>versión simplificada</strong> que es más fácil de entender pero menos eficiente. Luego, describiremos cómo difiere la <strong>versión real de la simplificada</strong>.</p><h3 id="h-121-protocolo-de-diseccion-version-simplificada" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">12.1 Protocolo de Disección: Versión Simplificada.</h3><p>Alice está defendiendo la afirmación de que, comenzando con el estado en el <em>RBlock</em> predecesor, la Máquina Virtual puede avanzar al estado especificado en el <em>RBlock</em> A. Básicamente, está afirmando que la Máquina Virtual puede ejecutar <strong>N</strong> instrucciones, y que esa ejecución consumirá <strong>M</strong> mensajes de el <em>inbox</em> y transformará el <em>hash</em> de las salidas de <strong>H&apos;</strong> a <strong>H</strong>.</p><p>El primer movimiento de Alice requiere que ella <strong>divida</strong> sus afirmaciones sobre los estados intermedios entre el inicio (<em>0 instrucciones ejecutadas</em>) y el final (<strong><em>N</em></strong>* instrucciones ejecutadas*). Por lo tanto, requerimos que Alice divida su afirmación por la mitad y publique el estado en el punto intermedio, después de que se hayan ejecutado <strong>N/2</strong> instrucciones.</p><p>Ahora Alice ha dividido efectivamente su afirmación de <strong>N</strong> pasos en <strong>dos</strong> afirmaciones de (<strong>N/2</strong>) pasos. Bob tiene que señalar una de esas <strong>dos afirmaciones de tamaño reducido y afirmar que es incorrecta</strong>.</p><p>En este punto, estamos básicamente en la situación original: Alice ha hecho una afirmación con la que Bob <strong>no está de acuerdo</strong>. Pero hemos reducido el tamaño de la afirmación <strong>a la mitad</strong>, de <strong>N</strong> a <strong>N/2</strong>. Podemos aplicar el mismo método nuevamente, con Alice dividiendo y Bob eligiendo una de las mitades, para reducir el tamaño a <strong>N/4</strong>. Y podemos continuar dividiendo por la mitad, de acuerdo con lo cual, después de un número logarítmico de rondas, Alice y Bob estarán en desacuerdo sobre <strong>un solo paso de ejecución</strong>. Ahí es donde termina la fase de disección del protocolo y Alice debe presentar una prueba de un solo paso que será verificada por el EthBridge.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/af601878e2ca7415d3177de0dd421383eaa38184952ebebcb4e75e0cd0173800.png" alt="https://www.tracer.finance/radar/arbitrum-in-under-10/" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://www.tracer.finance/radar/arbitrum-in-under-10/</figcaption></figure><h3 id="h-122-por-que-la-diseccion-identifica-correctamente-a-un-actor-malicioso" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">12.2 ¿Por qué la Disección Identifica Correctamente a un actor malicioso?.</h3><p>Antes de hablar sobre las complejidades del protocolo real de desafío, detengámonos a comprender por qué la versión simplificada del protocolo es correcta. La corrección implica dos cosas:</p><ul><li><p><strong>(1)</strong> si la afirmación inicial de Alice es correcta, Alice siempre puede ganar el desafío.</p></li><li><p><strong>(2)</strong> si la afirmación inicial de Alice es incorrecta, Bob siempre puede ganar el desafío.</p></li></ul><p>Para demostrar <strong>(1)</strong>, observa que si la afirmación inicial de Alice es correcta, ella puede ofrecer una afirmación veraz del punto intermedio y <strong>ambas afirmaciones de tamaño reducido implicadas serán correctas</strong>. Por lo tanto, <strong>sin importar a cuál de las dos mitades se oponga Bob</strong>, Alice estará nuevamente en la posición de defender una afirmación correcta. En cada etapa del protocolo, Alice estará defendiendo una afirmación correcta. Al final, Alice tendrá una afirmación correcta de un solo paso que probar, por lo que esa afirmación será demostrable y Alice puede ganar el desafío.</p><p>Para demostrar <strong>(2)</strong>, observa que si la afirmación inicial de Alice es incorrecta, esto solo puede deberse a que su punto final afirmado después de <strong>N</strong> pasos es incorrecto. Ahora, cuando Alice ofrece su afirmación del estado intermedio, esa afirmación puede ser correcta o incorrecta. Si es incorrecta, <strong>Bob puede desafiar la afirmación de la primera mitad de Alice, que será incorrecta</strong>. Si la afirmación de Alice sobre el estado intermedio es correcta, <strong>entonces su afirmación de la segunda mitad debe ser incorrecta</strong>, por lo que Bob puede desafiar eso. Entonces, pase lo que pase, <strong>Bob podrá desafiar una afirmación incorrecta de tamaño reducido</strong>. En cada etapa del protocolo, Bob puede identificar una afirmación incorrecta para desafiar. Al final, Alice tendrá una afirmación incorrecta de un solo paso que probar, lo cual no podrá hacer, por lo que Bob puede ganar el desafío.</p><p>(<em>Si eres exigente con la precisión matemática, debería estar claro cómo estos argumentos pueden convertirse en pruebas mediante inducción sobre </em><strong><em>N</em></strong>).</p><h3 id="h-123-el-protocolo-real-de-diseccion" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">12.3 El Protocolo Real de Disección.</h3><p>El protocolo real de disección es conceptualmente similar al simplificado descrito anteriormente, pero con varios cambios que mejoran la eficiencia o tratan casos especiales necesarios. Aquí tienes una lista de las diferencias.</p><p><strong>Disección sobre bloques L2 y luego sobre instrucciones:</strong> La afirmación de Alice se basa en un <em>RBlock</em>, que afirma el resultado de crear algunos bloques de Nitro de Capa 2. La disección ocurre primero sobre estos bloques de Capa 2 para reducir la disputa a una disputa sobre un solo bloque de Nitro de Capa 2. En este punto, la disputa se transforma en una disputa sobre una ejecución única de la <strong>Función de Transición de Estado</strong> o, en otras palabras, <strong>sobre la ejecución de una secuencia de instrucciones WAVM</strong>. Luego, el protocolo ejecuta nuevamente el subprotocolo de disección recursiva, esta vez sobre las instrucciones <strong>WAVM</strong>, para reducir la disputa a <strong>una sola instrucción</strong>. La disputa concluye con una prueba de un solo paso de una instrucción (<em>o una parte que no actúa y pierde por tiempo de espera</em>).</p><p><strong>Disección de K vías:</strong> En lugar de dividir una afirmación en dos segmentos de tamaño <strong>N/2</strong>, la dividimos en <strong>K</strong> segmentos de tamaño <strong>N/K</strong>. Esto requiere publicar <strong>K-1</strong> afirmaciones intermedias en puntos uniformemente espaciados a lo largo de la ejecución afirmada. Esto reduce el número de rondas en un factor de <strong>log(K)/log(2)</strong>.</p><p><strong>Responder una disección con una disección:</strong> En lugar de requerir dos movimientos en cada ronda del protocolo, donde Alice disecciona y Bob elige un segmento para desafiar, <strong>requerimos que Bob, al desafiar un segmento, publique su propio estado final afirmado para ese segmento</strong> (<em>que debe diferir del de Alice</em>) y su propia disección de su versión del segmento. Luego, Alice responderá identificando un subsegmento, publicando un estado final alternativo para ese segmento y diseccionándolo. Esto reduce el número de movimientos en el juego en un factor adicional de 2, ya que el tamaño se reduce en un factor de <strong>K</strong> en cada movimiento, en lugar de cada dos movimientos.</p><p><strong>Manejo del caso de inbox vacía:</strong> El <strong>AVM</strong> real no siempre puede ejecutar <strong>N</strong> unidades de gas sin quedarse atascado. La máquina puede detenerse o puede tener que esperar porque su <em>inbox</em> se agotó y no puede continuar hasta que lleguen más mensajes. Por lo tanto, se permite que Bob responda a la afirmación de Alice de <strong>N</strong> pasos alegando que <strong>N</strong> pasos no son posibles. El protocolo real permite que cualquier respuesta (excepto la afirmación inicial) reclame un estado final especial que significa esencialmente que la cantidad especificada de ejecución no es posible bajo las condiciones actuales.</p><p><strong>Límites de tiempo:</strong> A cada jugador <strong>se le asigna un tiempo permitido</strong>. El tiempo total que un jugador utiliza para todos sus movimientos <strong>debe ser menor que el tiempo permitido</strong>, de lo contrario, <strong>perderá el juego</strong>. Piensa en el tiempo permitido como aproximadamente <strong>una semana</strong>.</p><p>Debería quedar claro que estos cambios <strong>no afectan la corrección básica del protocolo de desafío</strong>. Sin embargo, <strong>mejoran su eficiencia</strong> y le <strong>permiten manejar todos los casos que pueden surgir en la práctica</strong>.</p><h3 id="h-124-prueba-de-un-paso-one-step-proofs" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">12.4 Prueba de un Paso (One Step Proofs).</h3><p>Las pruebas de un Paso (<strong><em>OSP</em></strong>, por sus siglas en inglés) se basan en ciertas <strong>suposiciones sobre los casos que pueden derivar en una ejecución correcta</strong>. En este documento se detallan esas suposiciones sobre lo que se está ejecutando.</p><p>Si un caso es &quot;<strong>Imposible</strong>&quot;, es decir, <strong>se asume que el caso nunca surgirá en una ejecución correcta</strong>, entonces el <strong>OSP</strong> puede implementar cualquier semántica de instrucción en ese caso.</p><p>En un desafío entre <strong>partes malintencionadas</strong>, cualquier caso puede surgir. El protocolo de desafío debe tomar medidas seguras en cada caso. Sin embargo, la semántica de las instrucciones puede ser peculiar en tales casos, ya que <strong>si ambas partes en un desafío son malintencionadas, al protocolo no le importa quién gana el desafío</strong>.</p><p>En un desafío con <strong>una parte honesta</strong>, dicha parte nunca necesitará probar de forma incremental un caso Imposible. <strong>La parte honesta solo afirmará ejecuciones correctas, por lo que sólo deberá probar casos posibles</strong>.</p><p>En un desafío con <strong>una parte honesta</strong> y <strong>otra deshonesta</strong>, esta última podría afirmar una ejecución que transicione a un caso “<strong>imposible</strong>”. Sin embargo, tal ejecución debe incluir una ejecución inválida de un caso “<strong>posible</strong>” anterior en la afirmación. Dado que un desafío que involucra a una parte honesta eventualmente requerirá una <strong>OSP</strong> sobre la primera instrucción en la que las partes no están de acuerdo, la <strong>OSP</strong> se realizará en el punto de divergencia anterior y no en la ejecución posterior de un caso “<strong>imposible</strong>”.</p><p>En general, algunos casos “<strong>imposibles</strong>” <strong>serán detectables por el verificador de OSP</strong> y otros no. Para garantizar la seguridad, <strong>los casos imposibles detectables deben definirse mediante la transición de la máquina a un estado de error</strong>, lo que permitiría que la gobernanza eventualmente promueva una actualización para recuperarse del error. Un caso <strong>imposible indetectable</strong>, en caso de que ocurra en una ejecución correcta, <strong>podría provocar una falla de seguridad</strong>.</p><p>Las siguientes suposiciones, en conjunto, deben evitar que surja un caso imposible en una ejecución correcta:</p><h3 id="h-el-codigo-wavm-se-genera-mediante-arbitrator-a-partir-de-wasm-valido" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>El código WAVM se genera mediante Arbitrator a partir de WASM válido.</strong></h3><p>WAVM es el nombre del <strong>conjunto de instrucciones personalizado</strong> similar a WASM utilizado para las pruebas. <em>Arbitrator</em> transpila el código <strong>WASM a WAVM</strong>. También invoca a <em>wasm-validate</em> de <em>wabt</em> (<em>WebAssembly Binary Toolkit</em>) para garantizar que el WASM de entrada sea válido. Se asume que el WAVM producido por <em>Arbitrator</em> a partir de WASM válido <strong>nunca encontrará un caso inalcanzable</strong>. Los mensajes de la <em>inbox</em> no deben ser demasiado grandes.</p><p>El método actual de <em>hash</em> de la <em>inbox</em> requiere que el mensaje completo de la misma esté disponible para la prueba. Dicho mensaje no debe ser demasiado grande como para impedir que se suministre para la prueba, y esto está garantizado para las <em>inboxes</em>.</p><p>El <strong>límite de longitud actual es de 117,964 bytes</strong>, que corresponde al <strong>90%</strong> del tamaño máximo de transacción que aceptará <strong>Geth</strong>, dejando <strong>13,108 bytes</strong> <strong>para otros datos de prueba</strong>.</p><h3 id="h-las-preimagenes-solicitadas-deben-ser-conocidas-y-no-demasiado-grandes" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Las preimágenes solicitadas deben ser conocidas y no demasiado grandes.</strong></h3><p>WAVM tiene un <em>opcode</em> que resuelve la preimagen de un <em>hash Keccak-256</em>. Sin embargo, esto solo se puede ejecutar <strong>si la preimagen ya es conocida por todos los nodos y solo se puede probar si la preimagen no es demasiado larga</strong>. Las violaciones de esta suposición <strong>no pueden ser detectadas por el verificador de OSP</strong>. El límite de longitud actual es de <strong>117,964 bytes</strong> por las razones mencionadas anteriormente.</p><p>A continuación se presenta una lista de las preimágenes que pueden ser solicitadas por Nitro y por qué son conocidas por todas las partes y no son demasiado grandes:</p><ul><li><p><strong>Headers de los bloques:</strong></p></li></ul><p>Nitro puede solicitar hasta los <strong>últimos</strong> <strong>256 headers</strong> de bloques de Capa 2 (<em>L2</em>). El <strong>último header de bloque es necesario para determinar el estado actual</strong>, y los bloques anteriores son necesarios para implementar la instrucción <em>EVM BLOCKHASH</em>.</p><p>Esto es seguro, ya que los headers de los bloques anteriores tienen un <strong>tamaño fijo</strong> y <strong>son conocidos por todos los nodos</strong>.</p><ul><li><p><strong>Acceso al trie de estado:</strong></p></li></ul><p>Para resolver el estado, Nitro <strong>recorre</strong> <strong>el trie de estado</strong> <strong>resolviendo preimágenes.</strong> Esto es seguro, ya que los validadores <strong>retienen el estado de archivo de los bloques no confirmados</strong>, cada rama del trie tiene un <strong>tamaño fijo</strong> y <strong>la única entrada de tamaño variable en el trie es el código de contrato</strong>, que está limitado por la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-170"><strong>EIP-170</strong></a> a aproximadamente <strong>24KB</strong>.</p><p>Estas suposiciones, en conjunto, están diseñadas para <strong>evitar que surja un caso imposible en una ejecución correcta</strong>. Se han establecido salvaguardias para garantizar la validez, la seguridad de las ejecuciones y pruebas en el protocolo OSP.</p><h3 id="h-125-eficiencia" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">12.5 Eficiencia.</h3><p>El protocolo de desafío está diseñado de manera que la disputa pueda resolverse con <strong>un mínimo de trabajo requerido por el protocolo</strong> <em>(a través de sus contratos de Ethereum de Capa 1</em>) <strong>en su papel de árbitro</strong>. Cuando es el turno de Alice, el protocolo solo necesita realizar <strong>un seguimiento del tiempo que Alice utiliza</strong> y asegurarse de que su movimiento incluya los <strong>K-1</strong> puntos intermedios requeridos. El protocolo no necesita prestar atención a si esas afirmaciones son correctas de alguna manera; solo necesita saber si el movimiento de Alice &quot;<strong>tiene la forma correcta</strong>&quot;.</p><p>El único punto en el que el protocolo necesita evaluar un movimiento &quot;<strong>por sus méritos</strong>&quot; es en la prueba de un solo paso, donde necesita examinar la prueba de Alice y determinar si la prueba <strong>proporcionada realmente establece la corrección o incorrección de la instrucción en disputa</strong>. Sin embargo, dado que esta es una prueba de un solo paso y el tamaño de la instrucción es relativamente pequeño, el costo computacional y de almacenamiento asociado también es manejable.</p><p>En general, el protocolo de desafío está diseñado para ser eficiente y escalable, minimizando la carga en el árbitro y permitiendo resolver las disputas de manera justa y confiable.</p><hr><h2 id="h-13arbitrum-bridge" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">13.🌉Arbitrum Bridge.</h2><p>Gracias a la habilidad de protocolo de arbitrum de <strong>intercambiar mensajes entre L1 y L2</strong>, los usuarios de la red pueden aprovecharse de esto para mover activos o tokens de una manera trustless de la red de <strong>Arbitrum a Ethereum</strong> y <strong>viceversa</strong>. En principio cualquier tipo de activo puede ser <strong>punteado</strong>, ya sea, <strong>Ether</strong>, <strong>tokens ERC20</strong>, <strong>tokens ERC-721</strong>, etc.</p><h3 id="h-131-deposito-y-retiro-de-ether-eth" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">13.1 Depósito y Retiro de Ether (ETH).</h3><p>Para mover Ether de la red de Etherum a la red de Arbitrum, se debe ejecutar un transacción de depósito usando la función “<code>Inbox.depositEth</code>”. Esto transfiere los fondos hacia el contrato de bridge en L1 y acredita al usuario como los mismos fondos en la red de Arbitrum hacia una dirección específica.</p><p>A nivel de programacion la sintaxis se ve de la siguente manera:</p><p><code>function depositEth(address destAddr) external payable override returns (uint256)</code></p><p>La siguiente imagen ilustra todo esto de una manera más sencilla:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/29a5ccfb7334ac1f5a7ffd5dbc06e75d16ebe350fbc9ac213d27d99826b5174f.png" alt="https://www.tracer.finance/radar/arbitrum-in-under-10/" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://www.tracer.finance/radar/arbitrum-in-under-10/</figcaption></figure><p><strong><em>Nota: en criptografía, el término “Época” ( o epoch en inglés) se refiere a una unidad de tiempo en la que los validadores de la red permanecen constantes. Se mide en bloques.</em></strong></p><p>Se puede <strong>retirar</strong> ether utilizando la funcion “ <code>withdrawEth</code>” de <strong>ArbSys</strong>:</p><p><code>ArbSys(100).withdrawEth{ value: 2300000 }(destAddress)</code></p><p>Al realizar el retiro, el saldo de <strong>Ether se quema en el lado de Arbitrum</strong> y luego estará <strong>disponible en el lado de Ethereum</strong>.</p><p><code>ArbSys.withdrawEth</code> es en realidad una función conveniente que es <strong>equivalente</strong> a llamar a <code>ArbSys.sendTxToL1</code> con <code>calldataForL1</code> <strong>vacío</strong>. Al igual que cualquier otra llamada <code>sendTxToL1</code>, requerirá una <strong>llamada adicional</strong> a <code>Outbox.executeTransaction</code> <strong>en L1</strong> después de que el período de disputa haya pasado para que el usuario <strong>finalice el reclamo de sus fondos</strong> en L1. Una vez que se ejecuta el retiro desde el <strong>Outbox</strong>, el saldo de Ether del usuario <strong>se acreditará en L1</strong>.</p><h3 id="h-132-deposito-y-retiro-de-erc-20-tokens" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">13.2 Depósito y Retiro de ERC-20 tokens.</h3><p>El protocolo de arbitrum técnicamente no distingue entre los diferentes <strong><em>standards</em> de tokens</strong> que existen, por ello, <strong>no le da ventajas especiales</strong> a ningún tipo de bridge en particular. Sin embargo, el equipo de Off Chain Labs ha creado el “<strong><em>Canonical Bridge</em></strong>”, el cual es el recomendado para los usuarios que usan arbitrum. Básicamente este “<strong><em>Canonical Bridge</em></strong>” es una <em>Dapp</em> con contratos tanto en Ethereum como en Arbitrum que se aprovecha de la <strong>capacidad de paso de mensajes entre L1 y L2</strong> explicados anteriormente.</p><h3 id="h-133-tipo-de-diseno" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">13.3 Tipo de Diseño.</h3><p>Para el puente de <em>tokens</em> se utiliza el término “<strong><em>Gateway</em></strong>”, el cual es un mecanismo utilizado para facilitar las transferencias de activos entre los dominios de <strong>Ethereum</strong> y <strong>Arbitrum</strong>.</p><p>La razón principal que motivó a crear el mecanismo “<strong><em>Gateway</em></strong>” fue la funcionalidad.</p><p>Generalmente, la funcionalidad de <em>gateway estándar</em> es suficiente para la mayoría de tokens, esto implica lo siguiente: <strong>un contrato de un token en Ethereum se asocia con un contrato de token emparejado en Arbitrum</strong>. Depositar un token involucra <strong>depositar</strong> cierta cantidad del <strong>token en un bridge contract en L1</strong> y <strong>mintear</strong> <strong>la misma cantidad</strong> en el contrato previamente emparejado en L2. En L2, el contrato emparejado se comporta igual que un contrato de <strong>token ERC20</strong> normal.</p><p>Por otro lado, al retirar es necesario <strong>quemar</strong> cierta cantidad del token, que luego de un tiempo se puede <strong>reclamar</strong> del bridge contract en L1.</p><p>Sin embargo, muchos tokens requieren sistemas con <strong><em>gateways</em> personalizadas</strong>, en donde las posibilidades son complicadas de generalizar. Por ejemplo:</p><ul><li><p>Aquellos tokens que <strong>producen intereses para sus holders</strong> deben garantizar que los mismos sean distribuidos correctamente entre las redes y que no se acumulen en el bridge contract.</p></li><li><p>Las implementaciones de <strong>WETH entre dominios</strong> (Ethereum y Arbitrum) requieren que los tokens pasen de <em>wrapped</em> a <em>unwrapped</em> a medida que se mueven entre L1 a L2 y viceversa.</p></li></ul><p>Por lo tanto, la arquitectura del bridge no solo debe ser diseñada para la <strong>funcionalidad estándar</strong> (<em>depósitos/retiros</em>), sino también para <strong>casos personalizados que necesiten otras funciones</strong>.</p><h3 id="h-134-implementacion-canonica-l2-por-contrato-de-token-l1" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">13.4 Implementación canónica L2 por contrato de token L1.</h3><p>Está muy bien tener varias <em>Gateways</em> personalizadas, sin embargo se debe <strong>evitar que un único token de L1 pueda estar emparejado por varios contratos en L2</strong> (<em>lo que puede generar problemas de colisión y confusión entre los usuarios y desarrolladores</em>). Por ello, es necesario tener una forma que rastree que token L1 y que <em>gateway</em> utilizará, y al mismo tiempo, tener <strong>un oráculo que mapee las direcciones de los tokens a través de los dominios de Ethereum y Arbitrum</strong>.</p><h3 id="h-135-implementacion-del-puente-canonico-de-tokens" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">13.5 Implementación del puente canónico de tokens.</h3><p>Con lo anterior en mente, se muestra una visión general de la arquitectura de puente de tokens. La misma está conformada de 3 tipos de contratos:</p><ol><li><p><strong>Contrato de Activos</strong>: Son los propios contratos de tokens, es decir, un ERC20 en L1 y su homólogo en Arbitrum.</p></li><li><p><strong>Gateways</strong>: Pares de contratos (<em>uno en L1, otro en L2</em>) que implementan un tipo particular de puente de activos entre cadenas.</p></li><li><p><strong>Routers</strong>: Exactamente dos contratos (<em>uno en L1, uno en L2</em>) que dirigen cada activo a su <em>Gateway</em> designada.</p></li></ol><p>Todas las transferencias de tokens de Ethereum a Arbitrum se inician a través del contrato llamado <code>L1GatewayRouter</code>. Este reenvía la llamada de depósito del token al contrato <code>L1ArbitrumGateway</code> correspondiente. <code>L1GatewayRouter</code> es responsable de asignar las direcciones de los tokens L1 a <code>L1Gateway</code>, actuando así <strong>como oráculo de direcciones L1/L2</strong> y <strong>garantizando que cada token corresponde a una única <em>Gateway</em></strong>. El <code>L1ArbitrumGateway</code> se comunica con un <code>L2ArbitrumGateway</code> (<em>usando los </em><strong><em>tickets reintentables</em></strong><em> explicados anteriormente</em>).</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7fea8c894ba1c31b47c605aae420344a7fb07bb299e4da6b141a5f581623f2a2.png" alt="https://developer.arbitrum.io/asset-bridging#bridging-erc20-tokens" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://developer.arbitrum.io/asset-bridging#bridging-erc20-tokens</figcaption></figure><p>Del mismo modo, las transferencias de <strong>Arbitrum a Ethereum</strong> se inician a través del contrato <code>L2GatewayRouter</code>, que reenvía las llamadas a la <code>L2ArbitrumGateway</code> del token, que a su vez se comunica con su correspondiente <code>L1ArbitrumGateway</code> (<em>típicamente/esperado a través del envío de mensajes a la Outbox</em>).</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/492b803bbe5ccd7aeb03796738195e9f653c37aede6e3cda2d7e7100cfffc65a.png" alt="https://developer.arbitrum.io/asset-bridging#bridging-erc20-tokens" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://developer.arbitrum.io/asset-bridging#bridging-erc20-tokens</figcaption></figure><p>Para cualquier emparejamiento de <em>gateway</em> dado, requerimos que las llamadas se inicien a través del <code>GatewayRouter</code>, y que los <em>gateways</em> se ajusten a las interfaces <code>TokenGateway</code>; las interfaces <code>TokenGateway</code> deben ser lo suficientemente flexibles y extensibles como para soportar cualquier funcionalidad de puente que pueda requerir un token en particular.</p><h3 id="h-136-puente-estandar-por-defecto" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">13.6 Puente estándar por defecto.</h3><p>Por defecto, cualquier token ERC20 en L1 que no esté registrado en una gateway puede ser puenteado a la gateway estándar ERC20 sin problemas.</p><p>Puede utilizar el <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bridge.arbitrum.io/"><strong>front-end del bridge</strong></a> o este <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/OffchainLabs/arbitrum-sdk/blob/master/scripts/deployStandard.ts"><strong>script</strong></a> para <strong>cruzar</strong> un token desde <strong>L1 a L2</strong> y <strong>viceversa</strong>.</p><h3 id="h-137-ejemplo-depositoretirada-de-arb-erc20-estandar" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">13.7 Ejemplo: Depósito/retirada de Arb-ERC20 estándar.</h3><p>Para ayudar a ilustrar cómo se ve todo esto en la práctica, vamos a ir a través de los pasos de cómo depositar y retirar <code>SomeERC20Token</code> a través de nuestra <strong><em>Gateway ERC20 estándar</em></strong>. Suponemos que <code>SomeERC20Token</code> ya se ha registrado en el L1GatewayRouter para utilizar la <strong><em>Gateway ERC20 estándar</em></strong>.</p><h3 id="h-depositos" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Depósitos.</strong></h3><ol><li><p>Un usuario llama a <code>GatewayRouter.outboundTransferCustomRefund</code> (con la dirección L1 de <code>SomeERC20Token</code> como argumento).</p></li><li><p><code>GatewayRouter</code> busca la <em>gateway</em> de <code>SomeERC20Token</code> y descubre que se trata de una <strong><em>Gateway ERC20 estándar</em></strong> (el contrato <code>L1ERC20Gateway</code>).</p></li><li><p><code>GatewayRouter</code> llama a <code>L1ERC20Gateway.outboundTransferCustomRefund</code>, reenviando los parámetros apropiados.</p></li><li><p><code>L1ERC20Gateway</code> deposita los tokens y crea un <strong>ticket reintentable</strong> para activar la función <code>finalizeInboundTransfer</code> de <code>L2ERC20Gateway</code> en L2.</p></li><li><p><code>finalizeInboundTransfer</code> mintea la cantidad apropiada de tokens en el contrato <code>arbSomeERC20Token</code> en L2.</p></li></ol><p><strong><em>Nota: Hay que tener en cuenta que es posible que algunas gateways personalizadas antiguas no tengan implementado</em></strong> <code>outboundTransferCustomRefund</code> <strong><em>y</em></strong> <code>GatewayRouter.outboundTransferCustomRefund</code> <strong><em>no recurra a</em></strong> <code>outboundTransfer</code><strong><em>. En esos casos, se utiliza la función</em></strong> <code>GatewayRouter.outboundTransfer</code><strong><em>.</em></strong></p><p>Tenga en cuenta que <code>arbSomeERC20Token</code> es una instancia de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/OffchainLabs/token-bridge-contracts/blob/main/contracts/tokenbridge/arbitrum/StandardArbERC20.sol"><strong>StandardArbERC20</strong></a>, que incluye las funciones <code>bridgeMint</code> y <code>bridgeBurn</code> que solo pueden ser llamadas por la <code>gatewayL2ERC20Gateway</code>.</p><h3 id="h-retiros" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Retiros.</strong></h3><ol><li><p>En Arbitrum, un usuario llama a <code>L2GatewayRouter.outBoundTransfer</code>, que a su vez llama a <code>outBoundTransfer</code> en la <em>gateway</em> de <code>arbSomeERC20Token</code> (es decir, <code>L2ERC20Gateway</code>).</p></li><li><p>Esto <strong>quema los tokens</strong> de <code>arbSomeERC20Token</code> y llama a <em>ArbSys</em> con un mensaje codificado a <code>L1ERC20Gateway.finalizeInboundTransfer</code>, que se ejecutará finalmente en L1.</p></li><li><p>Una vez que expira la ventana de disputa y se confirma la aserción con la transacción del usuario, éste puede llamar a <code>Outbox.executeTransaction</code>, que a su vez llama al mensaje codificado <code>L1ERC20Gateway.finalizeInboundTransfer</code>, <strong>liberando los tokens del usuario de la custodia del contrato</strong> <code>L1ERC20Gateway</code>.</p></li></ol><h3 id="h-138-la-gateway-personalizada-generica-de-arbitrum" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">13.8 La Gateway personalizada genérica de Arbitrum.</h3><p>El hecho de que un token tenga requisitos <strong>más allá</strong> de los que se ofrecen a través de la <em>Gateway</em> <code>StandardERC20</code>, <strong>no significa necesariamente que haya que crear una unica <em>Gateway</em> personalizada para el token en cuestión</strong>.</p><p>Gateway personalizada genérica de Arbitrum está <strong>diseñada para ser lo suficientemente flexible como para adaptarse a la mayoría</strong> (<em>pero no necesariamente a todas</em>) <strong>las necesidades de tokens fungibles personalizados</strong>.</p><p>Como regla general:</p><p>Si un token personalizado tiene la capacidad de <strong>aumentar su suministro</strong> (<em>es decir, mintear</em>) directamente en el L2, y desea que los tokens minteados en el L2 puedan retirarse de nuevo al L1 y sean reconocidos por el contrato L1, probablemente requerirá su propia <strong><em>Gateway</em> especial</strong>. De lo contrario, la <em>Gateway</em> personalizada genérica es probablemente la solución adecuada.</p><p>Algunos ejemplos de características de los tokens <strong>adecuadas</strong> para la Gateway personalizada genérica:</p><ul><li><p>Contrato de token L2 actualizable a través de un proxy.</p></li><li><p>El contrato de token L2 incluye whitelisting o blacklisting de direcciones.</p></li><li><p>El deployer determina la dirección del contrato de token L2.</p></li></ul><h3 id="h-139-configuracion-del-token-con-la-gateway-personalizada-generica" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">13.9 Configuración del token con la Gateway personalizada genérica.</h3><p>Aquí se encuentran <strong>los pasos para configurar un token</strong> para utilizar la <strong><em>Gateway</em> personalizada genérica</strong>:</p><p><strong>0) Tener un token en L1.</strong></p><p>El token en L1 debe ajustarse a la interfaz <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/OffchainLabs/token-bridge-contracts/blob/main/contracts/tokenbridge/ethereum/ICustomToken.sol">ICustomToken</a> (<em>para saber como hacer esto puedes ver </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/OffchainLabs/token-bridge-contracts/blob/main/contracts/tokenbridge/test/TestCustomTokenL1.sol"><em>TestCustomTokenL1</em></a>) Además, debe tener una función <code>isArbitrumEnabled</code> en su interfaz.</p><p><strong>1) Despliegue</strong> <strong>de su token en Arbitrum.</strong></p><p>El token debe ajustarse a la interfaz mínima de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/OffchainLabs/token-bridge-contracts/blob/main/contracts/tokenbridge/arbitrum/IArbToken.sol">IArbToken</a>; es decir, debe tener las funciones <code>bridgeMint</code> y <code>bridgeBurn</code> que solo pueden ser usadas por el contrato <code>L2CustomGateway</code>, y la dirección de su correspondiente token Ethereum accesible a través de <code>l1Address</code>. Para ver un ejemplo de implementación, consulta <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/OffchainLabs/token-bridge-contracts/blob/main/contracts/tokenbridge/test/TestArbCustomToken.sol">TestArbCustomToken</a>.</p><p><strong>2) Registre su token en L1 a su token en L2 a través del contrato</strong> <code>L1CustomGateway</code></p><p>Haga que el contrato de su token L1 realice una llamada externa a <code>L1CustomGateway.registerTokenToL2</code>. Este registro puede realizarse alternativamente como un registro de propietario de cadena a través de una propuesta en la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://forum.arbitrum.foundation/">Arbitrum DAO</a>.</p><p><strong>3) Registre su token en L1 en el router L1Gateway</strong></p><p>Una vez completado el registro de su token en la <em>Custom Gateway</em>, haga que el contrato de su token L1 realice una llamada externa a <code>L1GatewayRouter.setGateway</code>; al igual que en el paso anterior, este registro también puede realizarse alternativamente como un registro de propietario de cadena a través de la propuesta <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://forum.arbitrum.foundation/">Arbitrum DAO</a>.</p><hr><h2 id="h-14conclusion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">14.👨‍🎓Conclusión.</h2><p>El <em>Optimistic Rollup</em> de Arbitrum se ha establecido como una <strong>solución prometedora para mejorar la escalabilidad de la red Ethereum</strong>. Mediante el uso de <em>rollups</em> optimistas, Arbitrum ha logrado aumentar la <strong>eficiencia</strong> en el <strong>procesamiento de transacciones</strong>, <strong>reducir los costos</strong> y <strong>brindar una mayor flexibilidad</strong> en las funcionalidades de las aplicaciones descentralizadas.</p><p>Toda la criptografía asociada al ecosistema de arbitrum, como por ejemplo, el <strong>secuenciador</strong>, los <strong>tickets reintentables</strong>, los <strong>mensajes de L1-L2</strong> y el <strong>bridge</strong>,etc. han sido cuidadosamente <strong>estudiada</strong> y <strong>diseñada</strong> para tener respuesta ante cualquier <strong>evento</strong> <strong>malicioso</strong> o las <strong>necesidades personales</strong> de cada usuario y, al mismo tiempo, manteniendo los principios <strong><em>trustless</em></strong> y <strong><em>permissionless</em></strong> de Ethereum.</p><p>Con su enfoque basado en la <strong>presunción de validez</strong> de las transacciones y un sistema de desafío para garantizar la integridad, Arbitrum ofrece una <strong>alternativa sólida</strong> para mejorar la experiencia de los usuarios de Ethereum. A medida que esta tecnología continúa evolucionando, se espera que Arbitrum desempeñe aún más el papel que está tomando en la adopción masiva de las aplicaciones descentralizadas y la expansión del ecosistema blockchain.</p><hr><h2 id="h-agradecimientos" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>🫂 Agradecimientos</strong></h2><p>🎉 ¡Gracias por leer hasta el final!🎉 Si está interesado en esta solución de escalabilidad te invitamos a revisar nuestra <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/39d63a8af9ca4524a7237b1f2456e745?v=95c70d362d8e4aae8007420ea6c827bc">biblioteca de Layer 2 en español</a>.</p><p>Si quieren seguir aprendiendo y colaborando con nosotros, le invitamos a unirse a nuestra vibrante comunidad de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/l2espaniol">Telegram L2 en Español</a> y a seguirnos en nuestro <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://http/">Twitter L2 en Español</a>. Allí encontrará una gran cantidad de información sobre Layer 2 y el ecosistema de Blockchain en general. ¡Te Esperamos!</p>]]></content:encoded>
            <author>layer2es@newsletter.paragraph.com (L2 en Español)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/2df1aee7d7abf55c8686cec82b87cef74e4dd26ea835d4b0826d6c8501eb44ba.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Profundizando en Polygon zkEVM]]></title>
            <link>https://paragraph.com/@layer2es/profundizando-en-polygon-zkevm</link>
            <guid>H4n5MnBuKmlvM3YLxGqt</guid>
            <pubDate>Thu, 22 Jun 2023 17:05:51 GMT</pubDate>
            <description><![CDATA[Series Polygon zkEVM 2/2 ¡Hola comunidad! 👋 ¡Bienvenidos a la segunda parte de la serie Polygon zkEVM! En la primera parte, hicimos una introducción general sobre la arquitectura y componentes de esta tecnología, así como su pensamiento en cuanto a la compatibilidad/equivalencia con ETH, junto con su ética y valores fundamentales (Ethos). En este artículo, explicaremos cómo se llega a un consenso a través de un Smart Contract y cómo funciona este mecanismo de incentivación económica. También...]]></description>
            <content:encoded><![CDATA[<h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"></h1><p><strong><em>Series Polygon zkEVM 2/2</em></strong></p><p>¡Hola comunidad! 👋</p><p>¡Bienvenidos a la <strong>segunda parte</strong> de la serie Polygon zkEVM! En la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/LqQL8hRqyyBXEAQm6vNfrYZ47QbV2wMG3Jk6cyr6x80">primera parte</a>, hicimos una introducción general sobre la <strong>arquitectura y componentes</strong> de esta tecnología, así como su pensamiento en cuanto a la <strong>compatibilidad/equivalencia</strong> con ETH, junto con su <strong>ética y valores</strong> fundamentales (Ethos).</p><p>En este artículo, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="">explicaremos cómo se llega a <strong>un consenso a través de un Smart</strong> <strong>Contract</strong> y cómo funciona este <strong>mecanismo de incentivación económica</strong></a>.</p><p>También exploraremos cómo funcionan <strong>los estados de las transacciones</strong> y cómo se simulan y controlan varios estados para garantizar la validez de las transacciones con la seguridad en la capa de ETH, así como una parte de <strong>exploración de transacciones</strong> para aprender a visualizar esta información.</p><hr><h2 id="h-contrato-de-consenso" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🤝 Contrato de Consenso</h2><p>En la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/LqQL8hRqyyBXEAQm6vNfrYZ47QbV2wMG3Jk6cyr6x80">Parte 1</a> introducimos PoD <em>(Proof of Donation)</em> como un mecanismo de consenso utilizado en la blockchain. A diferencia de resolver problemas matemáticos complejos para validar transacciones y crear nuevos bloques, PoD funciona como una subasta descentralizada.</p><h3 id="h-modelo-de-implementacion" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">📄 Modelo de implementación</h3><p>El modelo de implementación del Contrato de Consenso <code>PolygonZkEVM.sol,</code> emplea una técnica más sencilla y eficiente que el PoD para resolver los desafíos del consenso. Múltiples coordinadores producen <em>batch</em> en L2 y estos <em>batch</em> se crean a partir de las transacciones enrolladas de L1, <strong>este nuevo modelo es conocido como PoE</strong> <strong>(Proof of Efficiency)</strong></p><p>La implementación estratégica del consenso basado en contratos tiene como objetivo garantizar que la red:</p><ul><li><p>🌐 - Alcance un nivel aceptable de descentralización.</p></li><li><p>🔐 - Mantenga su característica <em>Permissionless</em> para producir <em>batches</em> L2.</p></li><li><p>⚡️ - Sea altamente eficiente, lo que es fundamental para el rendimiento general de la red.</p></li><li><p>🛡️ - Esté protegida de ataques malintencionados, especialmente por parte de los validadores.</p></li><li><p>⚖️ - Mantenga un equilibrio justo entre el esfuerzo global de validación y el valor de la red.</p></li></ul><h3 id="h-contrato-de-consenso-polygonzkevmsol" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🤝🟣 Contrato de Consenso PolygonZkEVM.sol</h3><p>El contrato de Consenso <code>PolygonZkEVM.sol</code> desplegado en L1, se utiliza para garantizar que las transiciones de estado en el protocolo zkEVM se realizan de manera correcta, siguiendo un conjunto de reglas predefinidas. Este protocolo emplea una prueba de validez para asegurar la corrección de las transiciones de estado.</p><p>Para verificar que cada transición se completa correctamente, se utiliza un contrato inteligente que emplea <strong>circuitos zk-SNARK.</strong> El proceso se realiza en dos pasos, transacciones por <em>batches</em> y validación de transacciones.</p><p>En zkEVM, se utilizan dos tipos de participantes, <strong>Secuenciadores</strong> y <strong>Agregadores</strong>, para llevar a cabo los procedimientos.</p><ul><li><p>Los <strong>Secuenciadores:</strong> proponen <em>batch</em> de transacciones enrolladas en el Contrato de Consenso.</p></li><li><p>Los <strong>Agregadores:</strong> verifican la validez de los <em>batch</em> y proporcionan pruebas de validez.</p></li></ul><p>El contrato inteligente realiza <strong>dos llamadas,</strong> una para recibir los <em>batch</em> de los Secuenciadores y otra para validarlos con los Agregadores. <strong>Cualquier Agregador sin permisos puede enviar la prueba</strong> para demostrar la exactitud del cálculo de transición de estado.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d9470f63c3d887438ca1001b5654d7d327a7ff4fb9ac55d991cb5c437f44824d.png" alt="Implementación de PoE para mantener Consenso y Estabilidad" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Implementación de PoE para mantener Consenso y Estabilidad</figcaption></figure><hr><h2 id="h-tokenomics" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">📊 Tokenomics</h2><p>El contrato inteligente de Consenso <code>PolygonZkEVM.sol</code>, establece los siguientes requisitos para los Secuenciadores y Agregadores:</p><p><strong>Secuenciadores</strong>: actualmente, solo existe una entidad controladora que actúa como Secuenciador, aunque en el futuro se espera descentralizar este mecanismo. Por el momento, el contrato garantiza que solo el poseedor de la clave privada puede enviar secuencias. Sin embargo, veremos como habilitado en cierto casos prácticos el mecanismo <code>forcebatch</code> se consigue evitar la censura.</p><p>Para obtener el derecho a crear y proponer <em>batches</em>, el <strong>Secuenciador</strong> debe <strong>pagar</strong> una tarifa en forma de token <strong>MATIC</strong>. Si el Secuenciador propone <em>batches</em> válidos (que consisten en transacciones válidas), será incentivado con la tarifa pagada por los solicitantes de transacciones o los usuarios de la red.</p><p><strong>Agregadores:</strong> son los responsable de recopilar todos los datos necesarios para una transacción y enviarlos al probador. El probador realizará cálculos polinómicos complejos para proporcionar una prueba zk que el contrato inteligente verificará para validar la transacción.</p><p>El Agregador también recibe la salida del proveedor y envía la información completa al contrato inteligente para su validación final.</p><p>Para poder proporcionar pruebas de validez para transacciones de capa 2, los Agregadores deben tener hardware especializado y ejecutar el software zkNode de zkEVM. Además, deben competir para producir pruebas de validez lo antes posible y el primer Agregador en presentar una prueba de validez gana la tarifa MATIC que paga el Secuenciador para ese <em>batch</em> específico.</p><p>En resumen, la tarea principal de un Agregador es proporcionar pruebas de validez para las transacciones propuestas por los Secuenciadores y competir para producir la primera prueba de validez y así ganar la tarifa MATIC. En cuanto a las tarifas y los incentivos, se ha diseñado una estructura adecuada para ellos, que se describe a continuación más detallada.</p><hr><h2 id="h-estructura-de-incentivacion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">💰 Estructura de incentivación</h2><p>Como ya hemos visto en la arquitectura de zkEVM, la red cuenta con dos tipos de participantes: <strong>Secuenciadores</strong> y <strong>Agregadores</strong>. Es importante destacar que se han diseñado estructuras de incentivos adecuadas para cada uno de ellos con el fin de mantener la red rápida y segura. A continuación, se presenta un resumen de la estructura de tarifas para ambos.</p><h3 id="h-secuenciador" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🤖 Secuenciador</h3><p>El Secuenciador se encarga de recoger transacciones y publicarlas en <em>batches</em>. A cambio, recibe comisiones de las transacciones publicadas.</p><ul><li><p><strong>Recoge transacciones y publica batches:</strong> el Secuenciador es responsable de recoger transacciones y agruparlas en <em>batches</em> para su procesamiento en la red zkEVM.</p></li><li><p><strong>Recibe comisiones:</strong> el Secuenciador recibe una comisión por cada transacción publicada en su <em>batch</em>.</p></li><li><p><strong>Paga las tarifas de transacción:</strong> el Secuenciador debe pagar las tarifas de transacción de L1 y MATIC (dependiendo de los <em>batches</em> pendientes).</p></li><li><p><strong>MATIC va a los Agregadores:</strong> parte de las tarifas de transacción pagadas por el Secuenciador se destinan a los Agregadores como incentivo para su participación.</p></li><li><p><strong>Es rentable si:</strong> las comisiones de las transacciones en el <em>batch</em> son mayores que la llamada L1 más la tarifa MATIC.</p></li></ul><h3 id="h-agregador" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🛡️ Agregador</h3><p>Los Agregadores son responsables de procesar las transacciones publicadas por los Secuenciadores, construir la prueba zk Proof y recibir MATIC como incentivo.</p><ul><li><p><strong>Procesa las transacciones:</strong> los Agregadores procesan las transacciones publicadas por los Secuenciadores.</p></li><li><p><strong>Construyen zk Proof:</strong> los Agregadores deben construir la prueba zk Proof que valida la integridad de los <em>batches</em> de transacciones procesadas.</p></li><li><p><strong>Reciben MATIC:</strong> los Agregadores reciben MATIC como incentivo por su participación en la red zkEVM.</p></li><li><p><strong>Costo estático</strong>: los Agregadores deben pagar el costo de la llamada L1 y el costo del servidor para construir la prueba zk Proof.</p></li><li><p><strong>Es rentable si:</strong> la tarifa MATIC recibida es mayor que la llamada L1 más el costo del servidor.</p></li></ul><p>Con estas estructuras de incentivos, zkEVM se mantiene rápido y seguro para sus participantes.</p><hr><h2 id="h-mecanismo-de-incentivos-zkevm" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">⚙️💰 Mecanismo de incentivos zkEVM</h2><p>Para garantizar la sostenibilidad del sistema, los actores deben ser compensados por desempeñar correctamente sus roles y dar la finalidad del protocolo.</p><p>A menos que se especifique lo contrario, <strong>las medidas y reglas presentadas aquí se aplican a los casos en que los roles de Secuenciador y Agregador están descentralizados</strong> <strong>(es decir, cuando no haya Secuenciador de Confianza ni Agregador de Confianza),</strong> <strong>aunque veremos como aún esto no es el del todo posible, dado a la Confianza del Secuenciador.</strong></p><h3 id="h-tasas-de-transaccion-l2" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Tasas de transacción L2</h3><p>La moneda nativa utilizada en L2 es Bridged Ether, que se origina en L1. Esta es la moneda que se utiliza para pagar las tarifas de transacción L2. Se puede transferir a una relación de intercambio 1: 1 de L1 a L2 y viceversa.</p><h3 id="h-tarifas-de-secuenciacion" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Tarifas de Secuenciación</h3><p>El Secuenciador gana las tarifas de transacción pagadas por los usuarios de L2 por enviar transacciones y, por lo tanto, se paga directamente en Bridged Ether. El monto de las tarifas pagadas depende del precio del gas, que es establecido por los usuarios en función de cuánto están dispuestos a pagar por la ejecución de sus transacciones.</p><p>Para incentivar al Agregador para cada <em>batch</em> secuenciado, el Secuenciador debe bloquear una serie de tokens <strong>MATIC</strong> en el Contrato de L1 <code>PolygonZkEVM.sol</code> proporcional al número de <em>batches</em> en la secuencia. El número de tokens <strong>MATIC</strong> bloqueados por <em>batch</em> secuenciado se guarda en la variable <code>batchFee</code>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/313b93de8273d4b143a62ba89007a9045b0bd15aafcb69c9dddadd39a8a687fb.png" alt=" Tarifas y recompensas obtenidas por los actores del protocolo" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Tarifas y recompensas obtenidas por los actores del protocolo</figcaption></figure><p>Para maximizar sus ingresos, el Secuenciador prioriza las transacciones con precios más altos de gas. Además, hay un umbral por debajo del cual no es rentable para el Secuenciador ejecutar transacciones porque las tarifas ganadas por los usuarios de L2 son menores que las tarifas pagadas por las tarifas de secuenciación (más la transacción de secuenciación y fee en L1).</p><p>Los usuarios deben asegurarse de que sus tarifas de transacción sean mayores que esto umbral para que el Secuenciador sea incentivado a procesar sus transacciones.</p><p>El valor neto de Ether obtenido por el Secuenciador para secuenciar una secuencia de <em>batch</em> está representado por la siguiente expresión:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/02ac4f7ee3d03ad2822bc77afe4be1b2c2e2885ef0f49dbebf14710d56e19840.png" alt="Ganancia en ETH del Secuenciador" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Ganancia en ETH del Secuenciador</figcaption></figure><ul><li><p><code>totalL2TxGasFeeses:</code> es la suma total de las tarifas recaudadas de todas las transacciones L2 incluidas en la secuencia de lotes.</p></li><li><p><code>L1SeqTxGasFeees:</code> es la tarifa de gas de transacción de secuenciación pagada en L1.</p></li><li><p><code>batchFee:</code> es la variable de almacenamiento en el SC <code>PolygonZkEVM.sol</code></p></li><li><p><code>nBatcheses:</code> es el número de <em>batch</em> en la secuencia.</p></li><li><p><code>MATIC/ETH:</code> es el precio de la ficha MATIC expresada en ETH.</p></li></ul><h3 id="h-tarifas-de-agregacion" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Tarifas de Agregación</h3><p>El Agregador también necesita una compensación por cumplir correctamente su función.</p><p>El número de tokens <strong>MATIC</strong> que gana el Agregador cada vez que agrega una secuencia, denominado como <em>batchReward</em>, está determinado por el balance total del contrato MATIC y el número de <em>batches</em> agregados.</p><p>El MATIC ganado por <em>batch</em> agregado se calcula por el contrato L1 <code>PolygonZkEVM.sol</code> antes de la agregación de la secuencia utilizando la siguiente expresión:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8dcfd9e5ba873cac7308b49ca0daafa50320cb8821c7e904cf5ddf6d49e8c55e.png" alt="Recompensa en MATIC por Batch" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Recompensa en MATIC por Batch</figcaption></figure><p>La siguiente expresión representa la cantidad total de valor ETH que el Agregador ganará por la agregación de una secuencia de <em>batches</em>:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/dd563d9974d87043d615943443e55532a2c3030d970eea100dbc631c3d8aee78.png" alt="Ganancia en ETH del Agregador" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Ganancia en ETH del Agregador</figcaption></figure><ul><li><p><code>L1AggTxGasFee:</code> es la tarifa de gas de transacción de agregación pagada en L1.</p></li><li><p><code>batchReward:</code> es la cantidad de MATIC ganado por lote agregado.</p></li><li><p><code>nBatches:</code> es el número de batches en la secuencia</p></li><li><p><code>MATIC/ETH:</code> es el precio del token MATIC expresado en ETH.</p></li></ul><p>Ahora procedamos a analizar en el <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0x5132a183e9f3cb7c848b0aac5ae0c4f0491b7ab2#tokentxns">explorador filtrado</a> por la dirección del <em>proxy</em> con el token <strong>MATIC</strong>, para observar las entradas y salidas. De esta manera, podremos entender cómo el Secuenciador brinda un incentivo para el Agregador y cómo se retira una vez que el verificador ha realizado la prueba y se ha consolidado el estado.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/435e848335f809df9a407bc2409a7f5e7ac68f5d099acbfd0a361daa576a285a.png" alt="Incentivos de MATIC para Secuenciador y Agregador " blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Incentivos de MATIC para Secuenciador y Agregador</figcaption></figure><p>En este caso, es importante destacar que <strong>la suma de las entradas de MATIC de los <em>Sequence Batches</em> debe ser igual a la salida de MATIC por los <em>Verify Batches Trusted Aggregator</em></strong>, la cual indicará el estado ya consolidado con la prueba en L1 en la que vemos también <strong>un intervalo de tiempo entre <em>Sequence Batches</em> de 10 min entre ellos</strong>. Si en alguna ocasión estas sumas no coinciden, se debe revisar las transacciones y verificar que todo sea correcto, ya que a veces la visualización en el explorador puede ser engañosa y coincidir con la anterior “IN” y luego procesar una salida anterior.</p><p>Además, como aprendimos estos batches deben tener al menos 1 batch. En la imagen superior se aprecia que hay hasta 5 batches. En el ejemplo que estamos analizando, las <strong>sumas de &quot;IN&quot; coinciden con las de &quot;OUT&quot; de 2.8 y 2.2 MATIC</strong>, respectivamente.</p><hr><h2 id="h-polygon-zkevm-state-management" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🌐 Polygon zkEVM State Management</h2><p>Ahora explicaremos cómo el Protocolo Polygon zkEVM gestiona los estados del Rollup L2 al tiempo que proporciona verificabilidad y seguridad de transición estatal.</p><h3 id="h-administracion-de-estados-en-l2" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Administración de Estados en L2</h3><p>El Secuenciador de Confianza genera <em>batches</em>, pero para lograr una finalidad rápida de las transacciones L2 y evitar la necesidad de esperar el próximo bloque L1, se comparten con los nodos de red L2 a través de un canal de transmisión. Cada nodo ejecutará los <em>batches</em> para calcular el estado L2 resultante localmente.</p><p>Una vez el Secuenciador ha comprometido las secuencias de <em>batches</em> obtenidos directamente de los nodos de red L1, L2 los ejecutarán nuevamente, y ya no tendrán que confiar en ellos.</p><p>La ejecución fuera de cadena de los <em>batches</em> eventualmente se verificará en cadena a través de una zk Proof, y se comprometerá la raíz resultante del Estado L2. A medida que avanza el protocolo zkEVM, las nuevas raíces de estado L2 se sincronizarán directamente desde los nodos de red L1 en L2.</p><p>Tanto la disponibilidad de los datos como la verificación de la ejecución de las transacciones dependen únicamente de los supuestos de seguridad de L1 y, en la fase final del protocolo, los nodos sólo dependerán de los datos presentes en L1 para mantenerse sincronizados con cada transición de estado de L2.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/12a48b6453b8a87ef14b68d82986113ccb311c3920ed48e6df69dfd9b1df3c98.png" alt="Control de estados por PolygonZkEVM.sol" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Control de estados por PolygonZkEVM.sol</figcaption></figure><p>Los nodos L2 pueden recibir datos de <em>batches</em> de tres maneras diferentes:</p><ul><li><p>Directamente desde el Secuenciador antes de que los <em>batches</em> estén comprometidos con L1, o bien.</p></li><li><p>Directamente desde L1 después de que los <em>batches</em> hayan sido secuenciados.</p></li><li><p>O sólo después de que el Agregador haya probado la corrección de la ejecución y verificado por el contrato <code>PolygonZkEVM.sol</code></p></li></ul><p>Vale la pena señalar que <strong>los tres formatos de datos de <em>batch</em> son recibidos por los nodos L2 en orden cronológico enumerado</strong> anteriormente.</p><hr><h2 id="h-tres-estados-l2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🔄 Tres Estados L2</h2><p>Hay tres etapas del estado L2, cada una correspondiente a las tres formas diferentes en que los nodos L2 pueden actualizar su estado. Los tres casos dependen del formato de los datos del <em>batch</em> utilizados para actualizar el estado L2.</p><p>En el primera instancia, la actualización se basa únicamente en la información (i.e., <em>batches</em> que consisten en transacciones ordenadas) que provienen directamente del Secuenciador de Confianza, antes de cualquier disponibilidad de datos en L1. El estado L2 resultante se llama <strong>Estado de Confianza</strong> “<strong>Trusted State”</strong>.</p><p>En el segundo caso, la actualización se basa en información recuperada de la red L1 por nodos L2. Es decir, después de que los <em>batches</em> hayan sido secuenciados y los datos se hayan puesto a disposición en L1. El estado L2 se conoce como el <strong>Estado virtual</strong> “<strong>Virtual State”.</strong></p><p>La información utilizada para actualizar el estado L2 en el último caso incluye zk Proof verificadas de integridad computacional. Es decir, después de que la zk Proof se haya verificado con éxito en los nodos L1, L2 sincronizan su raíz local del estado “<strong>State root”</strong> L2 con el cometido en L1 por el Agregador de Confianza <strong>“Trusted Aggregator”</strong>. Como resultado, dicho Estado L2 se conoce como el <strong>Estado Consolidado</strong> “<strong>Consolidated State</strong>”.</p><p>La siguiente figura muestra la línea de tiempo de las etapas del estado L2 desde una perspectiva de un <em>batch</em>, así como las acciones que desencadenan la progresión de una etapa a la siguiente.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9303c6ba2d5e413da0520f28bf3cccba4a787dc66ab6199187637f62097c96f3.png" alt="Perspectiva de batch en los diferentes 3 Estados" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Perspectiva de batch en los diferentes 3 Estados</figcaption></figure><h3 id="h-enviar-transaccion" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Enviar transacción</h3><p>Las transacciones en la red Polygon zkEVM se crean en las billeteras de los usuarios y se firman con sus claves privadas.</p><p>Una vez generado y firmado, las transacciones se envían al nodo del Secuenciador de Confianza a través de su interfaz JSON-RPC. Las transacciones se almacenan en el grupo de transacciones pendientes, donde esperan la selección del Secuenciador para su ejecución o descarte.</p><p>Los usuarios y el zkEVM se comunican utilizando JSON-RPC, que es totalmente compatible con Ethereum RPC. Este enfoque permite que cualquier aplicación compatible con EVM, como el software de billetera, funcione y se sienta como usuarios reales de la red Ethereum.</p><h3 id="h-transacciones-y-bloques-en-zkevm" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Transacciones y bloques en zkEVM</h3><p>En el diseño actual, <strong>una sola transacción es equivalente a un bloque</strong>.</p><p>Esta estrategia de diseño no solo mejora la comunicación RPC y P2P entre nodos, sino que también mejora la compatibilidad con las herramientas existentes y facilita la finalidad rápida en L2. También simplifica el proceso de localización de transacciones de usuarios.</p><hr><h2 id="h-1-estado-de-confianza" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">1️⃣🔄 Estado de Confianza</h2><h3 id="h-ejecucion-de-transacciones" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Ejecución de transacciones</h3><p>El Secuenciador de Confianza <strong>”Trusted Sequencer “,</strong> lee las transacciones del grupo y decide si descartar ellos u ordenar y ejecutar ellos. Las transacciones que se han ejecutado se agregan a un <em>batch</em> de transacciones, y se actualiza el estado local de L2 del Secuenciador.</p><p>Una vez que se agrega una transacción al estado L2, se transmite a todos los demás nodos zkEVM a través de un servicio de transmisión. Vale la pena señalar que confiando en el Secuenciador de Confianza, podemos lograr una finalidad de transacción rápida (más rápida que en L1). Sin embargo, el Estado L2 resultante estará en un estado confiable hasta que el <em>batch</em> se comprometa en el Contrato de Consenso.</p><h3 id="h-verificacion-en-layer-1" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Verificación en Layer 1</h3><p>Los usuarios suelen interactuar con el Estado L2 de Confianza. Sin embargo, debido a determinadas características del protocolo, el proceso de verificación de las transacciones L2 (en la capa 1 para permitir las retiradas) puede llevar mucho tiempo, normalmente unos 30 minutos, pero hasta 2 semanas en casos excepcionales. En consecuencia, los usuarios deben ser conscientes de los riesgos potenciales asociados a las transacciones de alto valor, en particular las que no pueden anularse, como las retiradas, las transacciones en ventanilla y los puentes alternativos.</p><h3 id="h-procesamiento-por-batch" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Procesamiento por Batch</h3><p>El Secuenciador de Confianza debe procesar las transacciones por <em>batches</em> utilizando la siguiente estructura <code>BatchData</code> especificada en el contrato <code>PolygonZkEVM.sol.</code></p><pre data-type="codeBlock" text="  struct BatchData {
     bytes transactions;
     bytes32 globalExitRoot;
     uint64 timestamp;
     uint64 minForcedTimestamp;
}
"><code>  <span class="hljs-keyword">struct</span> <span class="hljs-title">BatchData</span> {
     <span class="hljs-keyword">bytes</span> transactions;
     <span class="hljs-keyword">bytes32</span> globalExitRoot;
     <span class="hljs-keyword">uint64</span> timestamp;
     <span class="hljs-keyword">uint64</span> minForcedTimestamp;
}
</code></pre><h3 id="h-transacciones" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Transacciones</h3><p>Son arrays de bytes (estructura de datos con elementos homogéneos, del mismo tipo, numérico o alfanumérico) que contienen las transacciones por <em>batches</em> concatenados.</p><p>Cada transacción se codifica según los formatos Ethereum pre-EIP-155 o EIP-155 utilizando el estándar RLP (prefijo de longitud recursiva), pero los valores de firma, v, r y s, se concatenan como se muestra a continuación;</p><ol><li><p><code>EIP-155</code>: RLP (nonce,gasprice,gasLimit,to,value,data,chainid,0,0,)#v#r#s</p></li><li><p><code>pre-EIP-155</code>: RLP (nonce,gasprice,gasLimit,to,value,data)#v#r#s.</p></li></ol><h3 id="h-globalexitroot" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">GlobalExitRoot</h3><p>Es la raíz del árbol Merkle de salida global del puente, que se sincronizará en el estado L2 al inicio de la ejecución por <em>batches</em>.</p><p>El puente transporta activos entre L1 y L2, y una transacción de reclamación desbloquea el activo en la red de destino.</p><h3 id="h-timestamp" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Timestamp</h3><p>Al igual que los bloques de Ethereum tienen marcas de tiempo, cada <em>batch</em> tiene una marca de tiempo.</p><p>Hay dos restricciones que cada marca de tiempo debe satisfacer para asegurar que los <em>batches</em> están ordenados en el tiempo y sincronizados con los bloques L1:</p><ol><li><p>La marca de tiempo de un <em>batch</em> determinado debe ser mayor o igual que la marca de tiempo del último <em>batch</em> secuenciado.</p></li><li><p>La marca de tiempo máxima que un Secuenciador de Confianza puede asignar a un <em>batch</em> es la marca de tiempo del bloque en el que se ejecuta la transacción L1 de secuenciación.</p></li></ol><h3 id="h-minforcedtimestamp" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">minForcedTimestamp</h3><p>Si un <em>batch</em> es de los denominados forzados, este parámetro debe ser mayor que cero. <strong>La censura se contrarresta utilizando <em>batches</em> forzados.</strong></p><hr><h2 id="h-2-estado-virtual" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2️⃣🔄 Estado Virtual</h2><h3 id="h-secuenciacion-de-batches" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Secuenciación de Batches</h3><p>Los <em>batches</em> deben secuenciarse y validarse antes de que puedan formar parte del Estado Virtual L2.</p><p>El Secuenciador de Confianza añade con éxito un lote a una secuencia de <em>batches</em> utilizando el mapeo <code>sequencedBatches</code> del contrato L1 <code>PolygonZkEVM.sol,</code> que es básicamente una estructura de almacenamiento que contiene la cola de secuencias que definen el Estado Virtual.</p><pre data-type="codeBlock" text="// SequenceBatchNum --&gt; SequencedBatchData
mapping(uint64 =&gt; SequencedBatchData) public sequencedBatches;
"><code><span class="hljs-comment">// SequenceBatchNum --> SequencedBatchData</span>
<span class="hljs-keyword">mapping</span>(<span class="hljs-keyword">uint64</span> <span class="hljs-operator">=</span><span class="hljs-operator">></span> SequencedBatchData) <span class="hljs-keyword">public</span> sequencedBatches;
</code></pre><p>Para que un <em>batch</em> pueda ser secuenciado, debe ser parte de la colección de <em>batches</em> que se secuenciarán. El Secuenciador de Confianza llama al Contrato <code>PolygonZkEVM.sol</code>, que utiliza su mapeo <code>sequenceBatches</code>. Este mapeo acepta una matriz de <em>batches</em> que se secuenciarán como argumento.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5443737879aaac66749b59ae7ac1139f335991099bb611aeea516950c7cdf462.png" alt="Secuencia de colección de batches" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Secuencia de colección de batches</figcaption></figure><h3 id="h-limites-maximos-y-minimos-de-tamano-de-batch" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Límites máximos y mínimos de tamaño de batch</h3><p>La constante pública del contrato, <code>MAX_TRANSACTIONS_BYTE_LENGTH</code>, determina el número máximo de transacciones que pueden incluirse en un lote (300000).</p><p>Del mismo modo, el número de <em>batches</em> de una secuencia está limitado por la constante pública del contrato <code>MAX_VERIFY_BATCHES</code> (1000). La matriz de <em>batches</em> debe contener al menos un <em>batch</em> y no más que el valor de la constante <code>MAX_VERIFY_BATCHES.</code></p><h3 id="h-validez-de-los-batches-e-integridad-del-estado-l2" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Validez de los batches e integridad del estado L2</h3><p>La función <code>sequencedBatches</code> itera sobre cada <em>batch</em> de la secuencia, comprobando su validez. Un <em>batch</em> válido debe cumplir los siguientes criterios:</p><ul><li><p>Debe incluir un valor <code>globalExitRoot</code> que esté presente en el <code>GlobalExitRootMap</code> del contrato L1 <code>PolygonZkEVMGlobalExitRoot.sol</code> del puente. Un <em>batch</em> sólo es válido si incluye un <code>globalExitRoot</code> válido.</p></li><li><p>La longitud de la matriz de bytes de transacciones debe ser inferior al valor de la constante <code>MAX_TRANSACTIONS_BYTE_LENGTH</code>.</p></li><li><p>La marca de tiempo del <em>batch</em> debe ser mayor o igual que la del último <em>batch</em> secuenciado, pero menor o igual que la marca de tiempo del bloque en el que se ejecuta la transacción L1 secuenciada. Todos los <em>batch</em> deben estar ordenados por hora.</p></li></ul><p>Si un <em>batch</em> no es válido, la transacción revierte, descartando toda la secuencia. En caso contrario, si todos los <em>batch</em> a secuenciar son válidos, el proceso de secuenciación continuará.</p><p>Como contador de <em>batch</em> se utiliza una variable de almacenamiento denominada <code>lastBatchSequenced</code>, que se incrementa cada vez que se secuencia un <em>batch</em>. Da un número de índice específico a cada <em>batch</em> que se utilizará como valor de posición en la cadena de <em>batches</em>.</p><p>El mismo mecanismo hash utilizado en las cadenas de bloques para enlazar un bloque con el siguiente se utiliza en los <em>batches</em> para garantizar la integridad criptográfica de la cadena de <em>batches</em>. Es decir, se incluye <strong>el resumen del <em>batch</em> anterior entre los datos utilizados para calcular el resumen del <em>batch</em> siguiente</strong>.</p><p>Como resultado, el resumen de un <em>batch</em> determinado es un hash acumulado de todos los <em>batches</em> secuenciados previamente, <strong>de ahí el nombre de hash acumulado de un <em>batch</em></strong>, denotado por <code>oldAccInputHash</code> para el antiguo y <code>newAccInputHash</code> para el nuevo.</p><p>Un hash acumulado de un <em>batch</em> específico tiene la siguiente estructura:</p><pre data-type="codeBlock" text="keccak256 ( 
    abi.encodePacked (
        bytes32 oldAccInputHash, 
        keccak256(bytes transactions), 
        bytes32 globalExitRoot ,
        uint64 timestamp ,
        address seqAddress
    )
)
"><code><span class="hljs-built_in">keccak256</span> ( 
    <span class="hljs-built_in">abi</span>.<span class="hljs-built_in">encodePacked</span> (
        <span class="hljs-keyword">bytes32</span> oldAccInputHash, 
        <span class="hljs-built_in">keccak256</span>(<span class="hljs-keyword">bytes</span> transactions), 
        <span class="hljs-keyword">bytes32</span> globalExitRoot ,
        <span class="hljs-keyword">uint64</span> timestamp ,
        <span class="hljs-keyword">address</span> seqAddress
    )
)
</code></pre><ul><li><p><code>oldAccInputHash</code>es el hash acumulado del <em>batch</em> secuenciado anterior.</p></li><li><p><code>keccack256(transactions)</code>es el resumen de Keccak de la matriz de bytes de transacciones.</p></li><li><p><code>globalExitRoot</code>es la raíz del árbol Merkle de salida global del puente.</p></li><li><p><code>timestamp</code>es la marca de tiempo del <em>batch.</em></p></li><li><p><code>seqAddress</code>es la dirección del Secuenciador de <em>batches</em>.</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ccee93980af6ebc290e5080240cc24c00f0722de01daf10b89c0346e31cc4f63.png" alt="Seguridad y Enlazamiento de hash acumulado" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Seguridad y Enlazamiento de hash acumulado</figcaption></figure><p>Como se muestra en el diagrama anterior, cada hash de entrada acumulado garantiza la integridad de los datos del <em>batch</em> actual (i.e., <code>transactions</code>, <code>timestamp</code>, y <code>globalExitRoot</code>, así como el orden en que fueron secuenciados).</p><p>Es importante tener en cuenta que cualquier cambio en la cadena de <em>batches</em> hace que todos los hash de entrada acumulados futuros sean incorrectos, lo que demuestra una falta de integridad en el estado L2 resultante.</p><h3 id="h-almacenamiento-minimo-de-batchdata" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Almacenamiento mínimo de BatchData</h3><p>Dado que las operaciones de almacenamiento en L1 son muy caras en términos de consumo de gas, es fundamental usarlo lo menos posible. Para lograr esto, las ranuras de almacenamiento (o las entradas de mapeo) se usan únicamente para almacenar un compromiso de secuencia.</p><p>Cada entrada de mapeo comete dos índices de <em>batch</em>.</p><ul><li><p>Ultimo <em>batch</em> de la secuencia anterior como valor de <code>SequencedBatchData</code> estructurar.</p></li><li><p>Último <em>batch</em> de la secuencia actual como clave de mapeo.</p></li></ul><p>Junto con el hash acumulado del último <em>batch</em> en la secuencia actual y una marca de tiempo.</p><p>Es importante tener en cuenta que <strong>solo se guarda el hash acumulado del último <em>batch</em> en la secuencia</strong>; todos los demás se calculan sobre la marcha para obtener el último.</p><p>Como se indicó anteriormente, el resumen del hash será un compromiso de toda la cadena de <em>batches</em>. Los índices de <em>batch</em> también comprometen información útil como el número de <em>batches</em> en la secuencia y su posición en la cadena de <em>batches</em>. La marca de tiempo ancla la secuencia a un punto específico en el tiempo.</p><p>La disponibilidad de datos de las transacciones L2 está garantizada porque los datos de cada <em>batch</em> se pueden recuperar la <code>calldata</code> de la transacción de secuenciación, que no forma parte del almacenamiento del contrato pero es parte del Estado L1. Finalmente un <code>SequenceBatches</code> emitirá el evento.</p><pre data-type="codeBlock" text="event SequenceBatches (uint64 indexed numBatch)
"><code><span class="hljs-function"><span class="hljs-keyword">event</span> <span class="hljs-title">SequenceBatches</span> (<span class="hljs-params"><span class="hljs-keyword">uint64</span> <span class="hljs-keyword">indexed</span> numBatch</span>)
</span></code></pre><p>Una vez que los <em>batches</em> se secuencian correctamente en L1, todos los nodos zkEVM pueden sincronizar su estado L2 local obteniendo los datos directamente de L1 <code>PolygonZkEVM.sol</code> contrato, sin tener que depender solo del Secuenciador de confianza. <strong>Así es como se alcanza el estado virtual L2</strong>.</p><hr><h2 id="h-3-estado-consolidado" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3️⃣🔄 Estado Consolidado</h2><h3 id="h-agregacion-por-batches" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Agregación por Batches</h3><p>Los Agregadores de Confianza eventualmente debería agregar las secuencias de <em>batches</em> previamente cometidos por los Secuenciadores de Confianza para lograr la etapa final del Estado L2, que es el Estado Consolidado.</p><p>Agregar una secuencia significa agregar con éxito la raíz de estado L2 resultante a <code>batchNumToStateRoot</code> mapeo en el contrato L1 <code>PolygonZkEVM.sol</code>. Esta es una estructura de almacenamiento que contiene todas las raíces consolidadas del Estado L2, que están codificadas por el último índice de <em>batch</em> de cada secuencia agregada de <em>batches</em>.</p><pre data-type="codeBlock" text="// BatchNum --&gt; state root
mapping (uint64 =&gt; bytes32) public batchNumToStateRoot;
"><code><span class="hljs-comment">// BatchNum --> state root</span>
<span class="hljs-keyword">mapping</span> (<span class="hljs-keyword">uint64</span> <span class="hljs-operator">=</span><span class="hljs-operator">></span> <span class="hljs-keyword">bytes32</span>) <span class="hljs-keyword">public</span> batchNumToStateRoot;
</code></pre><p>Además, la agregación implica la verificación exitosa de la zk Proof de la integridad computacional de la ejecución de <em>batches</em> de transacciones.</p><p>SNARK, es el esquema subyacente zk Proof de verificación. Una de sus características clave es la concisión y la velocidad de verificación de la prueba.</p><p>Como resultado, la integridad de un cálculo exhaustivo se puede verificar utilizando una fracción de los recursos computacionales requeridos por el cálculo original. Como resultado, al emplear un esquema SNARK, podemos proporcionar seguridad en la cadena a cálculos exhaustivos fuera de la cadena de una manera eficiente con el gas.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0fbd0e24607b31348b5b0246eef722fa3effb1f4b07a54db40b36441f4a02b5e.png" alt="Transición del estado L2 off-chain con herencia de seguridad on-chain" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Transición del estado L2 off-chain con herencia de seguridad on-chain</figcaption></figure><p>Como se muestra en el diagrama anterior, la ejecución fuera de cadena de los <em>batch</em> supondrá una transición de estado L2 y, en consecuencia, un cambio a una nueva raíz de estado L2.</p><p>La integridad del cálculo (CI) prueba de la ejecución es generada por el Agregador, y su verificación en cadena garantiza la validez de la raíz de estado L2 resultante.</p><h3 id="h-agregando-una-secuencia-de-batches" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Agregando una secuencia de Batches</h3><p>Los Executor y Prover son servicios del nodo Aggregator que ejecutan <em>batch</em> y generan pruebas. Los trataremos aquí como unos intérpretes de EVM que pueden:</p><ul><li><p>Ejecutar una secuencia de <em>batches</em> de transacciones en el estado L2 actual.</p></li><li><p>Calcular la raíz de estado L2 resultante.</p></li><li><p>Generar una zk Proof de integridad computacional para la ejecución.</p></li></ul><p>El sistema de verificación y la prueba están diseñados de tal manera que una verificación exitosa de la prueba demuestra criptográficamente que la ejecución de una secuencia dada de <em>batches</em> sobre un Estado L2 específico resulta en un Estado L2 representado por el argumento <code>newStateRoot</code>.</p><p>Resumiendo y repasando lo aprendido antes de comenzar las exploraciones, en Polygon zkEVM se divide el estado en tres etapas: <strong>Trusted State, Virtual State y Consolidated State.</strong> Cada una de estas etapas representa una forma diferente en que los nodos de capa 2 pueden actualizar su estado.</p><ul><li><p><strong>1ª Etapa:</strong> se basa en información del Secuenciador de confianza antes de que los datos estén disponibles en L1.</p></li><li><p><strong>2ª Etapa:</strong> utiliza información de la red L1 después de que los <em>batch</em> hayan sido secuenciados y los datos estén disponibles en L1.</p></li><li><p><strong>3ª Etapa:</strong> utiliza zk Proof para actualizar el estado L2.</p></li></ul><hr><h2 id="h-explorando-en-los-batches" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🔬 Explorando en los Batches</h2><p>En la tabla inferior se describen las diferencias observadas en los <em>batches</em> de transacciones desde el Estado de Confianza “<strong>Trusted State”</strong> al Estado Virtual “<strong>Virtual State</strong>”, donde el batch ya ha sido secuenciado y los datos están disponibles en L1, a falta de la última Validity Proof.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a4e0e5f41fb830da208bd82b1ce947e7bb178f0055502930094e5e5ef8b83a53.png" alt="Tabla de datos de varios Batch con el GlobalExitRoot y sus Timestamp" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Tabla de datos de varios Batch con el GlobalExitRoot y sus Timestamp</figcaption></figure><p>Escogimos aleatoriamente <em>batches,</em> pero profundizaremos más entre los <em>batch</em> <strong>10.680 y 10.683.</strong> Si los analizamos, vemos que comparten el mismo <code>exitGlobalRoot</code>, lo que significa que hay varios batches dentro de un mismo <em>batch</em>. Concretamente, se trata de cuatro <em>batches</em> distintos, cada uno con sus propias transacciones. En lugar de agregar un único <em>batch</em>, el Secuenciador agregó los cuatro batches compartiendo la misma raíz.</p><p>En los ejemplos que tienen un timestamp de alrededor de <em>400-510</em> segundos, suele haber <strong>un solo <em>batch</em> agregado</strong> y el timestamp que se observa corresponde a este único <em>batch</em>.</p><p>Sin embargo, en el caso mencionado anteriormente, el timestamp se va registrando cada vez que se agrega un nuevo batch con la misma <code>exitGlobalRoot</code>, hasta llegar al cuarto batch en el ejemplo 10.683. En este caso, el timestamp total marcado por el <code>exitGlobalRoot</code> en L1 es de <strong>12283 sg</strong> <strong>e</strong>ntre el principio y el final de la secuencia de batches.</p><h2 id="h-explorador" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🕵️ Explorador</h2><p>En el siguiente ejemplo, analizaremos el explorador de Polygon zkEVM y exploraremos la relación entre los batches, las transacciones y los bloques. En términos generales, encontramos una relación 1:1, lo que indica que las transacciones en los batches se corresponden con las totales de los bloques como aprendimos en el documento. Si deseas examinar estos datos, te proporcionaremos guías orientativas a continuación junto con el enlace al zkEVM PolygonScan para poder analizar su explorador.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zkevm.polygonscan.com/">https://zkevm.polygonscan.com/</a></p><p>Una vez hayas seleccionado una transacción o un batch, se mostrarán una serie de parámetros relevantes para el análisis, los cuales ya hemos revisado en el documento.</p><p>En este caso, examinaremos un ejemplo aleatorio del batch &quot;10.681&quot;, el cual puedes observar en la tabla adjunta.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d871bf2e8ef68e91f1d9b3b396670d31e0b60d9481bad7398e6c98483165bbbe.png" alt="Descripción de los datos del Batch 10681" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Descripción de los datos del Batch 10681</figcaption></figure><ol><li><p><code>Global Exit Root:</code> es la raíz del árbol Merkle de salida global del puente, que se sincronizará en el estado L2 al inicio de la ejecución por <em>batches</em>.</p></li><li><p><code>Acc Input Hash:</code> es la huella digital criptográfica única del último <em>batch</em> en la secuencia.</p></li><li><p><code>Sequence Tx Hash:</code> es el Hash de la transacción del Secuenciador en la que contendrá los datos del <em>batch</em> secuenciado.</p></li><li><p><code>Verify Batch Tx Hash:</code> es el Hash de la transacción del Agregador después de verificar con la zk Proof que los datos son los correctos y consolidarlos en L1.</p></li><li><p><code>State Root:</code> es la raíz del árbol Merkle de estado en L2 después de que se hayan ejecutado las transacciones de un <em>batch</em> sobre el estado anterior de L2. Es decir, es el resultado final de la actualización del estado en L2 después de la ejecución de las transacciones de un batch. Esta información se utiliza para la validación y sincronización de la información en la red.</p></li><li><p><code>l2Coinbase</code>: la dirección del Secuenciador que envía la recompensa bloqueada para incentivar al Agregador a procesar <em>batches</em>.</p></li><li><p><code>batches.timestamp</code>: la marca de tiempo en segundos en el momento en que se procesó el <em>batch</em>.</p></li></ol><hr><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1d36cc6b8ca9e2a649151dde7099e72e3bb41b408fd83853ea7e4ec52819ac1c.png" alt="Datos de la transacción del Batch 10681 del Secuenciador" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Datos de la transacción del Batch 10681 del Secuenciador</figcaption></figure><p><strong>Otros datos de la transacción:</strong></p><ul><li><p><code>batches.transactions</code>: una lista de transacciones codificadas en bytes que se procesaron en el <em>batch</em>.</p></li><li><p><code>batches.globalExitRoot</code>: la raíz de Merkle del estado global de la cadena de bloques en el momento en que se procesó el <em>batch</em>. Esto se utiliza para verificar que una salida se ha incluido en la cadena.</p></li><li><p><code>batches.minForcedTimestamp</code>: el tiempo mínimo en segundos para que se fuerce la inclusión del <em>batch</em>.</p></li></ul><p>Si deseas obtener más información sobre el contrato principal del rollup <code>PolygonZkEvm</code> puede revisar: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0x5132A183E9F3CB7C848b0AAC5Ae0c4f0491B7aB2">0x5132...7aB2Implementation (Upgradable)Admin</a>, podrás acceder a las reglas del sistema, incluyendo los parámetros básicos, los actores con permisos y los procedimientos de emergencia. Este contrato es responsable de recibir <em>batches</em> de transacciones, raíces de estado de L2 y pruebas zk, lo que permite revisar prácticamente todos los aspectos del sistema.</p><p>También sugerimos explorar nuestra <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.notion.so/layer2es/Polygon-zkEVM-2261f6649f2f44648838431982106443">Biblioteca Layer 2 en Español</a> y consultar en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://l2beat.com/scaling/projects/polygonzkevm">L2Beat</a>, donde encontrarás información adicional sobre el estado y los riesgos asociados a Polygon zkEVM.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d1d6a36a9dee9ce9e74626192bcb5bd59a08e64b10ef5c50551a31b1cf0b65f6.png" alt="Biblioteca de Layer 2 en Español" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Biblioteca de Layer 2 en Español</figcaption></figure><p>Actualmente, <strong>el principal inconveniente se relaciona con la posible falla del Secuenciador y su incapacidad para enviar <em>batches</em> de transacciones</strong>. Si esta función no está disponible, los usuarios no podrán confiar en el mecanismo de forzar batches, como se indica en L2Beat, ya que actualmente está deshabilitado.</p><p>Recuerda que siempre es importante consultar fuentes actualizadas para obtener la información más precisa sobre el estado y las características del sistema.</p><hr><h2 id="h-agradecimientos" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🫂 Agradecimientos</h2><p>🎉 ¡Gracias por leer hasta el final!🎉 Si está interesado en esta solución de escalabilidad, le recomendamos revisar la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/LqQL8hRqyyBXEAQm6vNfrYZ47QbV2wMG3Jk6cyr6x80">primera parte</a> o escuchar el Space para L2 en Español con el equipo de Polygon</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/live/O4WiUD7L1KA?feature=share&amp;cbrd=1">https://www.youtube.com/live/O4WiUD7L1KA?feature=share&amp;cbrd=1</a></p><p>Si quieren seguir aprendiendo y colaborando con nosotros, le invitamos a unirse a nuestra vibrante comunidad de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/l2espaniol">Telegram L2 en Español</a> y a seguirnos en nuestro Twitter L2 en Español. Allí encontrará una gran cantidad de información sobre Layer 2 y el ecosistema de Blockchain en general. ¡Te Esperamos!</p>]]></content:encoded>
            <author>layer2es@newsletter.paragraph.com (L2 en Español)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/fafd4e3639c1d4260722c79c07a5d2f03982ee7a41e775121359fc93dc2d181b.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[¿Como interacturar con Scroll Alpha Testnet?]]></title>
            <link>https://paragraph.com/@layer2es/como-interacturar-con-scroll-alpha-testnet</link>
            <guid>a5TWyqh812VBRbnmNk9B</guid>
            <pubDate>Fri, 26 May 2023 15:37:41 GMT</pubDate>
            <description><![CDATA[Hola a todos! Sean bienvenidos a esta guía de como interactuar con la Scroll Alpha Testnet de L2 en español para la comunidad.IntroducciónScroll es una solución de L2 diseñada para mejorar la escalabilidad y reducir las tarifas en la red Ethereum. Como una L2, Scroll utiliza la blockchain de Ethereum como capa base y proporciona una capa adicional de procesamiento fuera de la cadena (off-chain) para mejorar el rendimiento. Al utilizar Scroll, los usuarios pueden disfrutar de tiempos de confir...]]></description>
            <content:encoded><![CDATA[<p>Hola a todos! Sean bienvenidos a esta guía de como interactuar con la <strong>Scroll Alpha Testnet</strong> de L2 en español para la comunidad.</p><hr><h2 id="h-introduccion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Introducción</h2><p>Scroll es una solución de L2 diseñada para <strong>mejorar la escalabilidad</strong> y <strong>reducir las tarifas</strong> en la red Ethereum. Como una L2, Scroll utiliza la blockchain de Ethereum como capa base y proporciona una capa adicional de procesamiento fuera de la cadena (<em>off-chain</em>) para mejorar el rendimiento.</p><p>Al utilizar Scroll, los usuarios pueden disfrutar de tiempos de confirmación más rápidos y tarifas más bajas en comparación con las transacciones directamente en la blockchain de Ethereum. Además, Scroll es compatible con <em>smart contracts</em> existentes en Ethereum, lo que facilita la migración de aplicaciones y proyectos a esta solución de L2.</p><p><strong><em>¿Suena genial no?</em></strong></p><p><strong><em>Pero ahora la pregunta es : ¿Como podemos empezar a interactuar con Scroll?</em></strong></p><hr><h2 id="h-primeros-pasos-en-scroll" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Primeros pasos en Scroll</h2><h3 id="h-1-configurando-redes-network-setup" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">1. Configurando redes (Network Setup)</h3><p>Para interactuar con las aplicaciones descentralizadas, hacer transferencias o usar el <em>bridge</em> en la <em>testnet</em> de Scroll, es necesario contar con una billetera. El equipo de Scroll en su <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://guide.scroll.io/user-guide/setup">documentación</a> recomienda usar <strong>Metamask</strong> debido a que el proceso de configuración es mucho mas automatizado y rápido.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c9b17d5cd6c56c1d374526322054cbbefec3363dbfbc914b2faed78630470285.png" alt="https://scroll.io/alpha" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://scroll.io/alpha</figcaption></figure><p>Para importar las configuraciones de la red de prueba Alpha en tu billetera MetaMask, necesitas seguir estos pasos:</p><ol><li><p>Haz clic en todos los botones &quot;<strong>Add to wallet</strong>&quot; en la página de inicio de la Alpha testnet. Esto importará el ID de la cadena y las URL de RPC para la Alpha testnet de Scroll. <strong><em>(esta actuara como una L2)</em></strong></p></li><li><p>La red de prueba Goerli está configurada por defecto en MetaMask. Para mostrarla, haz clic en &quot;<strong>Mostrar/ocultar redes de prueba</strong>&quot; en el menú desplegable de selección de red de MetaMask. <strong><em>(esta actuara como una L1)</em></strong></p></li></ol><p>En caso de que quieras interacturar con la Alpha Scroll Testnet con otra billetera tendrás que agregarla manualmente. Aquí te dejamos la información necesaria para configurarla tu mismo.</p><p><strong>Alpha Scroll Testnet:</strong></p><ul><li><p><strong>RPC URL</strong>: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://guide.scroll.io/user-guide/setup">guide.scroll.io/user-guide/setup</a></p></li><li><p><strong>Chain ID</strong>: 534353</p></li><li><p><strong>Currency Symbol</strong>: ETH</p></li><li><p><strong>Block Explorer URL</strong>: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://blockscout.scroll.io">blockscout.scroll.io</a></p></li></ul><p><strong>Goerli Testnet:</strong></p><ul><li><p><strong>RPC URL</strong>: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://endpoints.omniatech.io/v1/eth/goerli/public">endpoints.omniatech.io/v1/eth/goerli/public</a></p></li><li><p><strong>Chain ID</strong>: 5</p></li><li><p><strong>Currency Symbol</strong>: ETH</p></li><li><p><strong>Block Explorer URL</strong>: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://goerli.etherscan.io">goerli.etherscan.io</a></p></li></ul><h3 id="h-2-obteniendo-fondos-de-prueba-faucet" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2. Obteniendo fondos de prueba (Faucet)</h3><p>Para interactuar con la testnet de Scroll, primero debes recibir ETH de la testnet Goerli. Luego puedes transferir desde la testnet Goerli a la Alpha testnet de Scroll. A continuacion te mostramos las 3 formas de obtener ETH en Goerli.</p><p><strong>A) Usando </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goerlifaucet.com/"><strong>goerlifaucet.com</strong></a><strong> (La que pide mas requisitos)</strong></p><p>Para usar esta opción sera necesario que te crees una cuenta en Alchemy (Se puede usar una cuenta de google para esto). Ademas la dirección de Ethereum que vayas a utilizar <strong>tendrá que tener un saldo en <em>mainnet</em> de al menos 0.001 ETH</strong>, esto con el fin de evitar el abuso y bots.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b0d41d11d32d563975fbcc5e84ddd23cd74bca2057ae3eb9a02284eb5b1168c5.png" alt="https://goerlifaucet.com/" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://goerlifaucet.com/</figcaption></figure><ol><li><p>Primero tendrás que ingresar tu dirección de Ethereum Goerli en la casilla.</p></li><li><p>Luego tendrás que completar un Capcha.</p></li><li><p>Finalmente le das al botón “<strong>Send me ETH</strong>”, autorizas la transacción en tu billetera y listo!</p></li></ol><p><strong>B) Usando </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://goerli-faucet.pk910.de"><strong>goerli-faucet.pk910.de</strong></a><strong> (La que toma mas tiempo)</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e78c23e557835528016f82e4dc166880daf0dfb6cb7306b6facedc65d06ce319.png" alt="https://goerli-faucet.pk910.de/" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://goerli-faucet.pk910.de/</figcaption></figure><p>Esta opción lo único que hay que hacer es:</p><ol><li><p>Colocar tu dirección que recibirá los fondos.</p></li><li><p>Completar el Capcha.</p></li><li><p>Darle al botón “<strong>Start Mining</strong>” y esperar el tiempo indicado (Puede durar varias horas).</p></li></ol><p>Es importante mencionar que no hay que esperar que se “<strong>minen</strong>” todos los ETH de Goerli (lo cual tarda aproximadamente 12 horas usando los 32 <em>workers</em>), solo es necesario esperar hasta que se recolecte la cantidad mínima requerida para poder hacer <strong><em>claim.</em></strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d6cd01b20200b87637f1d318f1769fd9072e76aa63b9e29e5b38641901e362c2.png" alt="https://goerli-faucet.pk910.de/" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://goerli-faucet.pk910.de/</figcaption></figure><p>Una vez completado el tiempo solo debes darle a “<strong>Stop Mining &amp; Claim Rewards</strong>” , <strong>autorizar la transacción desde tu billetera</strong> y listo!</p><p><strong>C) Usando </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://faucet.paradigm.xyz/"><strong>faucet.paradigm.xyz</strong></a><strong> (Para los que tengan mas de 50 Seguidores en Twitter)</strong></p><p>Para esta opción lo primero que hay que hacer es logearse (darle a “<strong><em>Sign in with Twitter</em></strong>”) con twitter y autorizar la aplicación.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/aac5487c1fe1c138693051cb4db8a25b09b34fdacfe23484af6a90bd1723f8e7.png" alt="https://faucet.paradigm.xyz/" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://faucet.paradigm.xyz/</figcaption></figure><p>Una vez que hayas ingresado con tu cuenta de Twitter solo deberás ingresar una dirección en la casilla, darle al botón “<strong>Claim</strong>” (que aparecerá después de que ingreses la dirección). Luego de un pequeña espera, los tokens apareceran en un billetera.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7bb1bc88cc364bc3285e275be14ee705f3d40b5abcfe8f0467158673a93c576f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><hr><h3 id="h-3-enviando-fondos-de-l1-a-l2-scroll-bridge" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3. Enviando fondos de L1 a L2 (Scroll Bridge)</h3><p>Una vez que tengamos los fondos en la testnet Goerli, podremos utilizarlos para cambiarlos de la L1 ( Goerli Testnet) a la L2 ( Scroll Alpha Testnet). Lo primero que hay que hacer es ingresar al <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scroll.io/alpha/bridge">portal del bridge</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/85c8a62715b073b1edd28bf4f895f7b62f3b4434cfbebb611785a15f5f8dda3e.png" alt="https://scroll.io/alpha/bridge" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://scroll.io/alpha/bridge</figcaption></figure><p>El portal es bastante intuitivo e idéntico a otros <em>bridges</em>. Sus partes son:</p><ol><li><p><strong>Botón “<em>Connect</em>”</strong>: para conectar la billetera que sera usada para el proceso.</p></li><li><p><strong>Casilla Superior (o “<em>From</em>”)</strong>: Es en donde ingresaremos el monto, el activo (o asset) y nos indica la red desde donde se enviaran los fondos.</p></li><li><p><strong>Casilla inferior (o “<em>To</em>”)</strong>: Indica el activo y la red en donde recibiremos los fondos.</p></li><li><p><strong>Botón de cambio (o “<em>Switch</em>”)</strong>: Para cambiar la direccion desde donde queremos enviar los fondos. Ej: desde <strong>L1 a L2</strong> ó de <strong>L2 a L1.</strong></p></li><li><p><strong>Indicador de tarifas(o “<em>fees</em>”)</strong>: Lugar se indica la cantidad de fees requeridos para la transacción.</p></li></ol><p>Cuando se realiza una transacción en el puente se ve de la siguiente manera:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d17d7a56cc2ce4067ace442a82209e6890f5549ee23aea691c97f07976975c85.png" alt="https://guide.scroll.io/user-guide/bridge" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://guide.scroll.io/user-guide/bridge</figcaption></figure><p>En donde:</p><ol><li><p>Se muestra la billetera que se esta utilizando.</p></li><li><p>Se muestra la red, el activo y el cantidad de importe desde donde se enviaran los fondos.</p></li><li><p>Muestra la red que recibirá el activo.</p></li><li><p>indica la cantidad de tarifas o el costo de la transacción para la red.</p></li><li><p>Botón para iniciar la transferencia entre redes.</p></li></ol><p>De acuerdo a la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://guide.scroll.io/user-guide/bridge/deposit-from-goerli-to-scroll">documentación de Scroll</a> el tiempo que toma pasar los fondos desde Goerli a Scroll Alpha es de <strong>8 a 14 minutos</strong>.</p><hr><h3 id="h-4-ver-estado-de-tus-transacciones-block-explorer" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4. Ver estado de tus transacciones (Block explorer)</h3><p>Al igual que cualquier otra red, Scroll te da la oportunidad de ver el progreso y los estados de las transacciones en los exploradores disponibles.</p><p><strong>Opción 1: </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://blockscout.scroll.io"><strong>blockscout.scroll.io</strong></a></p><p>Esta opción utiliza la tecnología del proyecto BlockScout como explorador de bloques para el Scroll Alpha Testnet.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/95950a36718b57623930d4e459da522548fe9dd4cbb1ea3088524d45121b59bd.png" alt="https://blockscout.scroll.io/" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://blockscout.scroll.io/</figcaption></figure><p><strong>Consejos:</strong></p><ul><li><p>La página de inicio del explorador de bloques muestra las <strong>estadísticas generales de la red, los últimos bloques y transacciones</strong>.</p></li><li><p>Al hacer <strong>click</strong> en el número de bloque y en el <em>hash</em> de la transacción en la página de inicio, se le <strong>redirige a la página Detalles del bloque y Detalles de la transacción</strong>.</p></li><li><p>Se puede buscar por <strong>dirección</strong>, <strong><em>hash</em> de transacción</strong> o <strong>número de bloque</strong> en el cuadro de búsqueda de la esquina superior derecha para encontrar información específica.</p></li></ul><p><strong>Opción 2: </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://scrollexplorer.unifra.io"><strong>scrollexplorer.unifra.io</strong></a></p><p>Esta opción fue desarrollada por la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/unifraplatform"><strong>Unifra</strong></a> que ha creado <strong>Scroll Explorer</strong> para una experiencia de exploración de bloques alternativa, que permite a los usuarios explorar aspectos adicionales de <strong>Scroll Alpha Testnet</strong>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/03f402e2a1633f3ffbdb7546aeb7fb54c61affef9e38f3db758d7318068c9d8a.png" alt="https://scrollexplorer.unifra.io/" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://scrollexplorer.unifra.io/</figcaption></figure><hr><h2 id="h-agradecimientos" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🤵Agradecimientos</h2><p>🎉 ¡Gracias por leer hasta el final! Desde L2 en español queremos darle un especial agradecimiento a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/FilosofiaCodigo"><strong>Ahmed Castro</strong></a>. Por ayudarnos con el contenido e investigación para la creación de este articulo.</p><p>Si está interesado en continuar aprendiendo y colaborando con nosotros, le invitamos a unirse a la vibrante comunidad de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/l2espaniol"><strong>Telegram L2 en Español</strong></a> y a seguirnos en nuestro <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Layer2es"><strong>Twitter L2 en Español</strong></a>. Allí encontrará una gran cantidad de información sobre <strong>Layer 2</strong> y el ecosistema de Blockchain en general. <strong>¡Te Esperamos!</strong></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/l2espaniol">https://t.me/l2espaniol</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Layer2es">https://twitter.com/Layer2es</a></p>]]></content:encoded>
            <author>layer2es@newsletter.paragraph.com (L2 en Español)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/7fe2d4abd9ee5332feed30d993bcb477bfddf46568b3254c7dafb1ff4b4ec3e3.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Introducción a la Arquitectura de Scroll]]></title>
            <link>https://paragraph.com/@layer2es/introducci-n-a-la-arquitectura-de-scroll</link>
            <guid>6FFjqTr1QrhMahbMMChE</guid>
            <pubDate>Tue, 23 May 2023 17:40:24 GMT</pubDate>
            <description><![CDATA[IntroducciónScroll es una solución de escalabilidad Layer 2 para Ethereum que utiliza la tecnología ZK. Funciona como un zkRollup equivalente a la EVM, permitiendo transacciones más rápidas y eficientes mientras mantiene la seguridad de la blockchain de Ethereum. La pieza central de Scroll es la zkEVM, que se encarga de probar la corrección de la ejecución de EVM en la Layer 2. Este proyecto se ha estado construyendo abiertamente durante casi 2 años en colaboración con el grupo Privacy and Sc...]]></description>
            <content:encoded><![CDATA[<h1 id="h-introduccion" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Introducción</h1><p>Scroll es una solución de escalabilidad <strong><em>Layer</em> 2</strong> para Ethereum que utiliza la tecnología ZK. Funciona como un <strong>zkRollup equivalente a la EVM</strong>, permitiendo transacciones más rápidas y eficientes mientras mantiene la seguridad de la blockchain de Ethereum.</p><p>La pieza central de Scroll es la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scroll.io/blog/zkEVM"><strong>zkEVM</strong></a>, que se encarga de probar la corrección de la ejecución de EVM en la <strong><em>Layer</em> 2</strong>. Este proyecto se ha estado construyendo abiertamente durante casi 2 años en colaboración con el grupo <em>Privacy and Scaling Explorations</em> de la Fundación Ethereum.</p><p>Sin embargo, para convertir <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scroll.io/blog/zkEVM"><strong>zkEVM</strong></a> en un <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethereum.org/es/developers/docs/scaling/zk-rollups/"><strong>zkRollup</strong></a> completo en Ethereum, se necesita construir una <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scroll.io/blog/architecture"><strong>arquitectura L2</strong></a><strong> completa</strong> alrededor de él. Este proceso ha requerido una gran cantidad de trabajo y esfuerzo por parte del equipo de desarrollo de Scroll.</p><hr><h1 id="h-arquitectura-de-scroll" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Arquitectura de Scroll</h1><p>En esencia la arquitectura de <strong>Scroll</strong> está compuesta de <strong>3</strong> piezas fundamentales.</p><p><strong>Scroll Node</strong>: Construye los bloques L2 a partir de transacciones de usuarios, los consigna en la <em>Layer</em> base de Ethereum y pasa mensajes entre L1 y L2.</p><p><strong>Roller Network</strong>: Genera las <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.alchemy.com/overviews/validity-proof-vs-fraud-proof#:~:text=A%20validity%20proof%2C%20also%20known,information%20shared%20between%20the%20two."><strong><em>validity proofs</em></strong></a> (o <strong>pruebas de validez</strong>) de la <em>zkEVM</em> para demostrar que las transacciones se ejecutan correctamente.</p><p><strong>Rollup and Bridge Contracts</strong>: Proporciona <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/riUBdyBGEL30ggWNKy81WwvC8cynh_3oNpcbmwHNMms"><strong><em>Data Availability</em></strong></a> (o <strong>disponibilidad de datos</strong>) para las transacciones de Scroll, verifica las pruebas de validez de <em>zkEVM</em> y permite a los usuarios mover activos entre Ethereum y Scroll.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/323658e820cd9779c368fe982adf5489dd9e180a10febaafd1994b05fee079f7.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-scroll-node" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Scroll Node</h3><p>El <strong><em>Scroll Node</em></strong> es el componente principal para que aplicaciones y usuarios interactúen con Scroll. Este nodo esta conformado por tres módulos: <strong>Secuenciador</strong>, <strong>Coordinador</strong> y <strong>Relayer</strong>.</p><p>El <strong><em>Sequencer</em></strong> (o <strong>Secuenciador</strong>) se encarga de proporcionar una interfaz <strong><em>JSON-RPC</em></strong> para recibir transacciones L2. Cada pocos segundos, este módulo recupera un grupo de transacciones del <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://academy.bit2me.com/que-es-la-mempool-bitcoin/"><strong><em>mempool</em></strong></a><strong> L2</strong>, luego las ejecuta para generar un nuevo bloque L2 y una nueva <strong><em>state root</em></strong>. Para lograr esto, se hizo un <strong><em>fork</em></strong> de <strong><em>Go-Ethereum (Geth)</em></strong>, una de las implementaciones de nodos Ethereum más populares, lo que permite heredar la seguridad y compatibilidad de Ethereum.</p><p>Cuando se genera un nuevo bloque, el <strong>Coordinator</strong> (o <strong>Coordinador</strong>) es notificado y recibe un <strong><em>execution trace</em></strong> asociado al nuevo bloque desde el <strong><em>Secuenciador</em></strong>. A continuación, envía este <strong><em>execution trace</em></strong> a un <strong><em>Roller</em></strong> seleccionado aleatoriamente del <strong><em>Roller Network</em></strong> para la generación de <strong>pruebas de validez</strong>.</p><p>Por último, el <strong><em>Relayer</em></strong> se encarga de vigilar los contratos del <strong><em>Bridge</em></strong> y el <strong><em>Rollup</em></strong> desplegados tanto en Ethereum como en Scroll. Sus responsabilidades principales son supervisar el contrato <em>rollup</em> para hacer un <strong>seguimiento del estado de los bloques L2</strong>, incluyendo su <strong>disponibilidad de datos</strong> y <strong>prueba de validez</strong>, así como vigilar los eventos de <strong>depósito</strong> y <strong>retirada</strong> de los contratos del <em>bridge</em> desplegados tanto en Ethereum como en Scroll, y <strong>retransmitir</strong> los mensajes de un lado a otro.</p><h3 id="h-roller-network" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Roller Network</h3><p>La <em>Roller Network</em> es la responsable de <strong>generar</strong> las pruebas de validez para el <strong><em>zkRollup</em></strong> de Scroll. Los Roller actúan como <em>provers</em> y se espera que utilicen aceleradores como GPUs, FPGAs y ASICs para reducir el tiempo y el costo de las pruebas. El proceso consta de los siguientes pasos:</p><ol><li><p>El <em>Roller</em> convierte el <strong><em>execution trace</em></strong> recibida del <strong><em>Coordinador</em></strong> en <strong>testigos</strong> (<em>Witness</em>) <strong>de circuito</strong>.</p></li><li><p>Se generan pruebas de validez para <strong>cada </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://tlu.tarilabs.com/cryptography/rank-1"><strong>circuito</strong></a><strong> <em>zkEVM</em></strong>.</p></li><li><p>Las pruebas de validez de varios circuitos <em>zkEVM</em> se <strong>agregan</strong> para formar una <strong>única</strong> prueba de validez del bloque.</p></li></ol><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0a1ac6ac291069377994c6906fa24b14d127e8760d02d6da320cffdb31b0196c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-contratos-del-rollup-y-el-bridge" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Contratos del Rollup y el Bridge</h3><p>Scroll se conecta a la base <em>Layer</em> de Ethereum mediante el uso de los <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://guide.scroll.io/developers/alpha-testnet-contracts"><em>smart contracts</em></a> asociados al <strong><em>Rollup</em></strong> y el <strong><em>Bridge</em></strong>. Estos contratos trabajan en conjunto para <strong>garantizar</strong> la <strong><em>Data Availability</em></strong> en las transacciones L2, al mismo tiempo que permiten a los usuarios <strong>transferir</strong> activos y mensajes entre L1 y L2.</p><p>El contrato <em>Rollup</em> recibe bloques L2 y las <em>state roots</em> del <strong><em>Sequencer</em></strong>. Las <em>state roots</em> se almacenan en el state de Ethereum, mientras que los datos de bloque L2 se guardan como <strong>calldata</strong> de Ethereum. Esto proporciona disponibilidad de datos para los bloques Scroll y aprovecha la seguridad de Ethereum para garantizar que los <em>indexers</em>, incluido el <strong>Scroll Relayer</strong>, puedan <strong>reconstruir</strong> los bloques L2. Una vez que se ha verificado la validez de un bloque L2 a través de una prueba, este se considera finalizado en Scroll.</p><p>Por otro lado, los contratos <strong><em>Bridge</em></strong> en Ethereum y Scroll permiten a los usuarios enviar mensajes arbitrarios entre L1 y L2. Además, se ha creado un protocolo <em>bridge</em> <em>Trustless</em> para transferir activos ERC-20 en <strong>ambas direcciones</strong>. Para enviar un mensaje o fondos de Ethereum a Scroll, los usuarios deben llamar a una transacción <strong><em>sendMessage</em></strong> en el contrato <strong><em>Bridge</em></strong>. El <em>Relayer</em> indexará esta transacción en L1 y la enviará al <em>Sequencer</em> para que se incluya en un bloque L2. El envío de mensajes desde Scroll a Ethereum se realiza de manera similar a través del contrato <em>Bridge</em> L2.</p><hr><h2 id="h-como-funciona-la-zkevm-de-scroll" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">¿Cómo funciona la zkEVM de Scroll?</h2><p>Luego de todo lo explicado el diagrama de operación de la <strong><em>zkEVM</em></strong> de Scroll funciona siguiendo la secuencia de pasos presentada a continuación:</p><h3 id="h-paso-1" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Paso 1:</h3><p>El Secuenciador genera una secuencia de bloques. Para el bloque i, el Secuenciador genera una <em>execution trace</em> <strong>T</strong> y la envía al Coordinador. Mientras tanto, también envía los datos de transacción <strong>D</strong> como <em>calldata</em> al contrato Rollup en Ethereum para la <strong>disponibilidad de datos</strong>, las <strong><em>state roots</em></strong> resultantes y los compromisos con los datos de transacción al contrato Rollup como estado.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6fd4107d8cf4ec907fb0d5e3eec12312c1360af5f2b6eba04a75d27ab18eed13.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-paso-2" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Paso 2:</h3><p>El <strong>Coordinador</strong> selecciona <strong>aleatoriamente</strong> un <strong><em>Roller</em></strong> para generar una prueba de validez para cada <em>execution trace</em> <strong>T</strong> de bloque. Para <strong>acelerar</strong> el proceso de generación de pruebas, las pruebas para <strong>diferentes bloques</strong> se pueden generar en paralelo en <strong>diferentes</strong> <strong><em>Rollers</em></strong>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d2758a345f0362d579fc0ad1387062174af1ea02dcfd88ebf1861176649624fb.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-paso-3" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Paso 3:</h3><p>Después de generar la prueba de bloque <strong>P</strong> para el bloque i, el <em>Roller</em> la envía de vuelta al <strong>Coordinador</strong>. Cada <strong>k</strong> bloques, el <strong>Coordinador</strong> despacha todas las pruebas recolectadas a otro <em>Roller</em> aleatorio, el cual agrupa las <strong>k</strong> pruebas de bloque en una sola prueba agregada <strong>A</strong> y la envia de vuelta al Coordinador.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4a8e5dc298d0ad72b5b3210bbb85c61ee79e1b2d8e68f91b24229cb0218e0ef1.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>Paso 4:</strong></p><p>Finalmente, el <strong>Coordinador</strong> envía la prueba agregada <strong>A</strong> al contrato <em>Rollup</em> para finalizar los bloques L2 i+1 a i+k verificando la <strong>prueba agregada A</strong> frente a las <strong><em>state roots</em></strong> y compromisos de datos de transacción previamente enviados al contrato <em>Rollup</em>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d6869843bf5b135d5eb52adc5430691b9661049bb62b496c6a37e6416a02595c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>En las imágenes se ilustra que los bloques de Scroll se finalizarán en L1 en un proceso de múltiples pasos. Cada bloque L2 avanzará a través de las siguientes tres etapas hasta que se finalice.</p><ul><li><p><strong>Pre-committed</strong> indica que un bloque ha sido propuesto por un Secuenciador y enviado a los Rollers. Aunque los bloques Precomprometidos aún no son una parte canónica de la cadena L2 de Scroll porque aún no se han publicado en la capa base de Ethereum, los usuarios que confían en el Secuenciador pueden optar por tomar medidas en anticipación.</p></li><li><p><strong>Committed</strong> indica que los datos de transacción de este bloque se han publicado en el contrato Rollup en Ethereum. Esto garantiza que los datos del bloque estén disponibles, pero no prueba que se hayan ejecutado de manera válida.</p></li><li><p><strong>Finalized</strong> indica que la ejecución correcta de las transacciones en este bloque se ha demostrado verificando una prueba de validez en la cadena en Ethereum. Los bloques Finalizados se consideran partes canónicas de la cadena L2 de Scroll.</p></li></ul><p>Al poner todo esto junto, Scroll es capaz de ejecutar el <em>bytecode</em> nativo de EVM en L2 mientras hereda fuertes garantías de seguridad de la base <em>layer</em> de Ethereum.</p><hr><h2 id="h-conclusion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Conclusión</h2><p>En resumen, Scroll es una solución de escalabilidad <strong><em>Layer</em></strong> 2 para Ethereum que utiliza la tecnología ZK para permitir transacciones más rápidas y eficientes en la red.</p><p>La pieza central de Scroll es la <strong><em>zkEVM</em></strong>, que es como un juez de la <strong>Layer 2</strong> que se encarga de verificar que todo lo que sucede en la red se está ejecutando de manera correcta, la cual se apoya en una arquitectura criptográfica construida alrededor de la misma.</p><p>La arquitectura de Scroll conformada por: el <strong><em>Scroll Node</em></strong>, la <strong><em>Roller Network</em></strong> y los <strong><em>Rollup and Bridge Contracts</em></strong>, que trabajan juntos para garantizar la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/riUBdyBGEL30ggWNKy81WwvC8cynh_3oNpcbmwHNMms"><strong><em>Data Availability</em></strong></a> en las transacciones L2, al mismo tiempo que permiten a los usuarios <strong>transferir</strong> activos y <strong>mensajes</strong> entre <strong>L1</strong> y <strong>L2</strong>.</p><p>El proyecto de Scroll ha sido construido abiertamente durante casi dos años y su potencial es evidente para los amantes de las soluciones <em>Layer</em> 2. Pero, como siempre, solo el tiempo dirá si la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scroll.io/blog/zkEVM"><strong><em>zkEVM</em></strong></a> de Scroll será un jugador importante en el futuro de la escalabilidad de Ethereum una vez que la <strong><em>mainnet</em></strong> este operativa. Lo que es seguro es que el equipo detrás de Scroll ha estado trabajando duro para hacer que la red sea más eficiente y escalable, y eso es algo que siempre es digno de aplaudir.</p><hr><h2 id="h-agradecimientos" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🤵Agradecimientos</h2><p>🎉 ¡Gracias por leer hasta el final! Desde L2 en español queremos darle un especial agradecimiento a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/FilosofiaCodigo"><strong>Ahmed Castro</strong></a>. Por ayudarnos con el contenido e investigación para la creación de este articulo.</p><p>Si está interesado en continuar aprendiendo y colaborando con nosotros, le invitamos a unirse a la vibrante comunidad de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/l2espaniol"><strong>Telegram L2 en Español</strong></a> y a seguirnos en nuestro <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Layer2es"><strong>Twitter L2 en Español</strong></a>. Allí encontrará una gran cantidad de información sobre <strong>Layer 2</strong> y el ecosistema de Blockchain en general. <strong>¡Te Esperamos!</strong></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/l2espaniol">https://t.me/l2espaniol</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Layer2es">https://twitter.com/Layer2es</a></p>]]></content:encoded>
            <author>layer2es@newsletter.paragraph.com (L2 en Español)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/57a0af85ca6066855a9efa4ce3d1a80a73632ac77f26366b09c26c8ae46ede3f.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[  Bridging y Finalidad: Optimism y Arbitrum]]></title>
            <link>https://paragraph.com/@layer2es/bridging-y-finalidad-optimism-y-arbitrum</link>
            <guid>sxIEcTEBNGaeEe1miYDG</guid>
            <pubDate>Thu, 18 May 2023 22:01:03 GMT</pubDate>
            <description><![CDATA[Esta es una traducción de un artículo en inglés llamado “Bridging and Finality: Optimism and Arbitrum” escrito por Jenny Pan para Jump. En el siguiente artículo vamos a repasar cada aspecto del rollup y explicar qué salvaguardas tiene el usuario respecto de la finalidad de sus transacciones en cada punto.Información PreliminarActualmente, tanto Arbitrum como Optimism, operan un solo secuenciador centralizado que está a cargo de ordenar todas las transacciones que recibe y se asume que este es...]]></description>
            <content:encoded><![CDATA[<p><em>Esta es una traducción de un artículo en inglés llamado “</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://jumpcrypto.com/bridging-and-finality-op-and-arb/"><em>Bridging and Finality: Optimism and Arbitrum</em></a><em>” escrito por </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://jumpcrypto.com/contributor/jenny/"><em>Jenny Pan</em></a><em> para Jump.</em></p><p>En el siguiente artículo vamos a repasar cada aspecto del rollup y explicar qué salvaguardas tiene el usuario respecto de la finalidad de sus transacciones en cada punto.</p><h3 id="h-informacion-preliminar" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Información Preliminar</h3><p>Actualmente, tanto Arbitrum como Optimism, operan un solo secuenciador centralizado que está a cargo de ordenar todas las transacciones que recibe y se asume que este esta operando de manera honesta y ordenando por orden de llegada. Se supone que existen planes para descentralizar el secuenciador usando un <em>whitelist</em> o nodos de L2 aprobados por la comunidad, pero el roadmap sigue sin estar muy claro.</p><h1 id="h-soft-finality" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Soft Finality</h1><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/983466244cc0a13b7ac9df7f39d06cfa33fddcfbbcf77551da80b918ec0e70bf.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Primero, el secuenciador recibe una transacción de dos maneras. Normalmente, cuando uno opera dentro de una L2, los usuarios conectan sus wallets a un nodo de L2 y envían de manera directa una transacción firmada offchain al secuenciador. En otras instancias, un usuario puede enviar una transacción al secuenciador al publicar una transacción de L1 en el <em>contract</em> del rollup en Ethereum; esto suele ser el caso para las operaciones realizadas en la L1 que requieran un mensaje en la L2, e.j. depositar un <em>asset</em> con un bridge en el rollup (depositando en la L1 y después minteando en la L2).</p><p>Después de recibir una transacción, el secuenciador ordena las transacciones offchain y emite un recibo instantáneo de la transacción al usuario como “<em>soft finality</em>” (finalidad blanda) dentro de 1-2 segundos. Esta transacción en tiempo real no requiere ninguna confirmación adicional onchain y se anuncia en vivo, así que cualquiera lo puede verificar y correr independientemente un <em>State Transition Function</em> (STF), o Función de Transición de Estado, determinista para deducir el resultado de esa transacción de manera inmediata.</p><p>Si la transacción fue enviada a la L1, el secuenciador de Arbitrum va a emitir un recibo en la L2 10 minutos antes de que esta llegue al secuenciador para asegurarse que ninguna reorganización de bloques en el corto plazo de la L1 ocurra y revierta la inclusión de las transacciones en el rollup. En Optimism Bedrock, se espera que las transacciones a la L1 se confirmen dentro de 3 minutos.</p><p>Además, en los intervalos de los bloques de la L2 en Optimism bedrock van a ser de 2 segundos (antes eran esporádicos). En Arbitrum Nitro, los intervalos de los bloques de la L2 son variables, generados 3-4 veces por segundo.</p><h3 id="h-trust-assumption" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Trust Assumption</h3><p>La confianza del usuario en la finalidad depende completamente de la confianza que se le tiene al secuenciador; un secuenciador que censure o esté offline podría diferir entre el orden indicado en este recibo instantáneo y el orden publicado en última instancia en un batch (lote). Lo peor que un secuenciador podría hacer es reordenar o demorar una transacción, ya que es imposible que este falsifique una transaccióndel usuario o proponaga una actualización inválida al estado.</p><p>En Arbitrum, para prevenir la censura por el secuenciador, un usuario puede forzar la inclusión de una transacción al sigueinte bloque de la L2, para <em>bypass</em> al secuenciador, en el caso de que este se haya atrasado por más de 24 horas - las transacciones después son incluidos en orden FIFO (<em>first in, first out</em> - primera en entrar, primera en salir).</p><p>En Optimism, las transacciones enviadas a la L1, se incluyen automáticamente en un bloque de la L2 lo antes posible; el primer bloque de la L2 en un rollup <em>epoch</em> debe incluir todas las transacciones depositadas en el primer bloque de la L1 (cada bloque de la L1 define un rollup <em>epoch</em>, y pueden haber varios bloques de la L2 por cada <em>epoch</em>).</p><h3 id="h-riesgo-de-reversion" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Riesgo de Reversión</h3><p>Si la transacción se envió directamente a la L2 y la L1 enfrentó una reorganización antes de que esa transacción se agrupara y finalizara en la L1, entonces las L2 podrían, en teoría, seguir creando bloques y agrupar todas esas transacciones que no lograron pasar la reorganización. Sin embargo, no hay documentación sobre esto para ninguna de las L2.</p><p>En el caso de que la transacción se envió a la L1, Arbitrum no tiene nada implementado para lidiar con una reorganización de L1. Esto no es tan grave, ya que desde el merge, hay un retraso de finalidad en la L1 de 12.8 minutos, por lo que este no está muy lejos de los 10 minutos. En Optimism, debido a que la L2 sigue a la L1 más estrechamente dentro de una ventana de 3 minutos, tendrá que manejar las reorganizaciones de L1 mediante la reorganización de L2 si es necesario, pero no se especifica cómo lo hace.</p><p>En estos escenarios, los rollups no ofrecen garantías. Las transacciones pueden nunca aparecer en la cadena y el procedimiento para su inclusión después de la reorganización no está bien detallado.</p><h1 id="h-hard-finality" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Hard Finality</h1><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fc42e6e11b0a5eb51aebf44d466f1c06312b9c1d46b91aa4224dba91f374db85.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Luego, el secuenciador comprime y publica las transacciones de la L2 en <em>batches</em> como calldata de Ethereum cada 1-3 minutos en el caso de Arbitrum y cada 30 segundos - 1 minuto en el caso de Optimism. <em>Calldata</em> es la parte no modificable de un smart contract que básicamente funciona como memoria y queda registrado onchain pero no como parte del estado del blockchain, lo que permite que sea más rentable para el almacenamiento de datos onchain.</p><p>En Solidity, la palabra <code>calldata</code> se utiliza para pasar argumentos a una función de smart contract específica. En este escenario, el secuenciador utiliza calldata para llamar a la función del contrato de rollup en la L1 y pasar datos de transacción comprimidos como input a la función. La transacción de la L2 ahora tiene la misma finalidad que el bloque L1 que la incluyó en un batch, así logrando un “<em>Hard Finality</em>”.</p><p>El estado de L2, que consta de cuentas, balances, contratos, etc., se estructura como un <em>Merkle tree</em>, llamado &quot;árbol de estado&quot; (<em>state tree</em> en inglés). La raíz de este árbol de estado es la raíz de estado de la L2 (<em>state root</em>) y define el estado más reciente del rollup, que se guarda en el contrato de rollup de la L1. Un secuenciador necesita enviar las raíces de estado antiguas (estado antes de las transacciones agrupadas) y nuevas (estado después de que se ejecutan las transacciones agrupadas) al publicar <em>batches</em>, que son necesarios para demostrar que los cambios en el estado son correctos.</p><p>Una vez que el secuenciador envía el <em>batch</em>, el contrato verifica que el state root previo coincida con el state root existente. Si las dos coinciden, el contrato descarta el antiguo state root y almacena un nuevo state root propuesto por el secuenciador.</p><h3 id="h-trust-assumption" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Trust Assumption</h3><p>El usuario ahora puede usar el estándar de finalidad que desee para las transacciones regulares en la L1 hacia la transacción en la L2 que ahora está incluida en un bloque de la L1. La ejecución en rollups optimistas es completamente determinista; un estado del chain actual y nuevo <em>input data</em> (datos de entrada) son suficientes para calcular el nuevo estado de la cadena a través del STF. En el momento en que este input data está disponible cuando el secuenciador publica un <em>batch</em>, se puede computar el nuevo estado de la L2 y el orden de las transacciones está determinado por la L1; el secuenciador ya no tiene más input. Los datos del <em>batch</em> publicados en la L1 están disponibles y son suficientes para que cualquier nodo reconstruya y valide el estado de la L2.</p><p>Cualquier usuario que no esté cómodo con las <em>trust assumptions</em> del secuenciador en la &quot;<em>soft finality</em>&quot; simplemente puede esperar a que el Secuenciador publique su transacción en un <em>batch</em>, ya que ofrece las mismas garantías que la finalidad L1.</p><h3 id="h-riesgo-de-reversion" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Riesgo de Reversión</h3><p>Los <em>batches</em> pasan por una reestructuración solo si Ethereum también lo hace.Esto se vuelve menos probable a medida que la presentación de los batches es seguida por más confirmaciones. Ya que estos batches se envían como calldata de Ethereum, no hay forma de censurar o modificarlos después de que la transacción se incluye en un bloque que tiene suficientes atestaciones; así es como las L2 heredan las garantías de seguridad de Ethereum. Por lo tanto, las transacciones de Arbitrum y Optimism que experimentan una &quot;<em>hard finality</em>&quot; están protegidas contra grandes reorganizaciones de bloques siempre que el mecanismo de consenso de Ethereum lo esté.</p><h1 id="h-periodo-de-desafio-y-retiro" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Período de Desafío y Retiro</h1><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3fa7263867afe81c6bc36709e0231d19c8701add812a4dfdd7b87a92dc810542.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>En Arbitrum, los validadores (actualmente con whitelist) verifican los batches de transacciones de la L1, los procesan uno a la vez utilizando un STF determinista y pueden impugnar el state root de la L2 publicada en el batch. El contrato de rollup en la L1 acepta nuevas raíces de estado inmediatamente después de que se publican, por lo que los <em>state commitments</em> (compromisos de estado) se pueden publicar en Ethereum sin la necesidad de una prueba de que sean correctos (por lo tanto optimistas, ya que se espera que sean correctos, de ahí el nombre de los rollups).</p><p>Si un <em>state commitment</em> propuesto no se impugna durante el período de desafío, se considera definitivo, después de lo cual los smart contracts en Ethereum pueden aceptar de manera segura pruebas de retiro sobre el estado de la L2 basado en ese commitment. Si se impugna con éxito un state commitment, el batch que no sea válido y los que sean publicados después de este serán revertidos, restaurando el rollup a su antiguo state root. El protocolo de rollup luego necesitará volver a ejecutar las transacciones y actualizar el estado del rollup.</p><p>Cualquier otro validador puede impugnar el state root dentro del período de desafío, el cual es de una semana, que incluye un juego de pruebas de fraude interactivo de varias rondas que finalmente será resuelto por la L1. Siempre que haya al menos un validador honesto, se garantiza que el state root de la L2 correcto se publique en la L1. Las pruebas de fraude utilizadas para impugnar los state commitments actualmente no están implementadas en Optimism.</p><p>Después de que el período de desafío ha terminado, finalmente se permiten los retiros. Los retiros son transacciones entre dominios (<em>cross-domain</em>) que se inician en la L2 y se finalizan mediante una transacción ejecutada en la L1, como para transferir tokens de una cuenta en una L2 a una cuenta en la L1. Un usuario simplemente necesita proporcionar una prueba de Merkle (usando calldata) al contrato de rollup que demuestra que su transacción fue incluida en el state root del rollup.</p><h3 id="h-trust-assumption" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Trust Assumption</h3><p>Si algún validador intenta desviarse del estado de la L2 válido, un validador honesto podrá impugnar esto. Solo necesitamos un validador honesto para que esto ocurra, por lo que sabemos que el estado válido finalmente prevalecerá. Un solo nodo honesto es todo lo que se necesita para avanzar la chain correctamente, publicando afirmaciones válidas o impugnando afirmaciones inválidas.</p><h3 id="h-riesgo-de-reversion" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Riesgo de Reversión</h3><p>Un state commitment (el resultado de ejecutar las transacciones) puede ser invalidado a través de una prueba de fraude exitosa y eliminado para finalmente ser reemplazado por otro commitment propuesto. Pero un desafío exitoso no reorganiza la L2 ni afecta la finalidad de la transacción; todavía está incluido en la L1. Solo significa que el cálculo del resultado de esta transacción en el estado de la chain es incorrecto y se volverá a calcular. El orden de las transacciones y el estado de la L2 no se ve afectado por un desafío de prueba de fraude.</p><h1 id="h-bridging-implication" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Bridging Implication</h1><p>Hemos desarrollado un marco que los bridges pueden seguir y los tipos de finalidad que ofrecerían garantías suficientes en diferentes casos de uso. Operaremos bajo el supuesto de que los bridges están ejecutando nodos completos en Arbitrum/Optimism y validando todas las transacciones del rollup. De esta manera, el puente no depende de los state commitments o las pruebas de fraude (por lo que no importa mucho que las pruebas de fraude aun no hayan sido implementadas en Optimism). Incluso cuando se implementen las pruebas de fraude, los puentes no necesitarán esperar el período de desafío de una semana, lo que permitirá a los usuarios acceder a sus activos antes. Creemos que usar los datos por batches de &quot;<em>hard finality</em>&quot; es suficiente, y los retiros de tokens se pueden implementar en bridges que se basan en el <em>hard finality</em> (dos épocas) en lugar del período de desafío (una semana).</p><p>En ciertos escenarios, los puentes aceleran el proceso aún más al permitir que los protocolos operen en commitment de &quot;<em>soft finality</em>&quot;, hasta la especificación del cliente. Todas las transacciones son vistas por cada uno de los validadores para el bridge al conectarse directamente a sus nodos operados de forma independiente. En lugar de validar solo los mensajes que alcanzan la finalidad en la chain original, que en este caso son dos épocas, los bridges brindan flexibilidad, permitiendo a los integradores especificar un mensaje más rápido si así lo desean, desde la entrega inmediata basada en recibos de transacciones instantáneos (publicando la transacción tan pronto como se recibe), hasta el límite original de dos épocas e incluso períodos más largos si es necesario.</p><p>En ciertos casos de uso, simplemente observar el registro del secuenciador puede considerarse &quot;suficientemente seguro&quot;; por ejemplo, si los oráculos quisieran emitir desde Ethereum, solo importa la validez de los mensajes, no tanto que los mensajes alcancen el consenso. Siempre que el puente ejecute nodos completos, se garantiza la validez de los mensajes y la mensajería más rápida podría ser una opción viable.</p><h3 id="h-trust-assumption" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Trust Assumption</h3><p>Para mensajes regulares, el bridge no tiene que confiar en el secuenciador para la disponibilidad, ya que los usuarios también pueden enviar transacciones directamente a la L1 (aunque a un costo de gas más alto) y no necesitamos confiar en su seguridad, ya que las transacciones se finalizan en la L1.</p><p>Para mensajes personalizados y más rápidos, sí tenemos que confiar en el secuenciador, ya que no hay ningún mecanismo que impida que el secuenciador se desvíe de su orden de transacción esperado - por orden de llegada y del orden que realmente publica en la L1. Este riesgo lo asume completamente el remitente que especifica que su mensaje sea retransmitido de inmediato en lugar de esperar la finalidad de la L1. Por lo tanto, un bridge de tokens debe seguir contando con el límite de 2-epochs, mientras que los mensajes <em>order-insensitive</em> (insensibles al orden) pueden ser verificados antes de la finalidad si así se desea.</p><h1 id="h-conclusion" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Conclusión</h1><p>En esta publicación, exploramos las suposiciones de confianza en cada fase del rollup optimista y el riesgo de reversión asociado con ellas. Luego vinculamos estos diferentes niveles de finalidad a las decisiones de diseño que consideran los protocolos de puente genéricos para que los usuarios y las aplicaciones entre chains tengan confianza en comprender las garantías que especifican para sus transacciones.</p><hr>]]></content:encoded>
            <author>layer2es@newsletter.paragraph.com (L2 en Español)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/5aa2bc1e6559450d845f4fcdef8dbd71e6d55d49e87bdcc80aac8d36e79a688d.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Introducción a Polygon zkEVM]]></title>
            <link>https://paragraph.com/@layer2es/introducci-n-a-polygon-zkevm</link>
            <guid>Nogs3L15cFASgAwMdqRU</guid>
            <pubDate>Tue, 09 May 2023 16:32:16 GMT</pubDate>
            <description><![CDATA[Series Polygon zkEVM 1/2 ¡Hola comunidad! 👋 Hoy les presentamos la primera parte de una serie de dos artículos en los que exploraremos todo lo que necesitan saber sobre Polygon zkEVM. Esta solución de escalabilidad descentralizada de Ethereum Layer 2 utiliza pruebas criptográficas de conocimiento cero (ZK Proof), para acelerar la validación y finalización de las transacciones fuera de la cadena, también conocido como ZK Rollup. Si están interesados en conocer cómo funciona esta solución de e...]]></description>
            <content:encoded><![CDATA[<p><strong><em>Series Polygon zkEVM 1/2</em></strong></p><p>¡Hola comunidad! 👋</p><p>Hoy les presentamos <strong>la primera parte</strong> de una serie de <strong>dos artículos</strong> en los que exploraremos todo lo que necesitan saber sobre <strong>Polygon zkEVM</strong>. Esta solución de escalabilidad descentralizada de Ethereum Layer 2 utiliza pruebas criptográficas de conocimiento cero (<strong>ZK Proof</strong>), para acelerar la validación y finalización de las transacciones fuera de la cadena, también conocido como ZK Rollup.</p><p>Si están interesados en conocer cómo funciona esta solución de escalabilidad descentralizada y cómo puede mejorar su experiencia en la red Ethereum, ¡no se pierdan esta ni la venidera segunda parte!</p><hr><h2 id="h-que-es-polygon-zkevm" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🟣 ¿Qué es Polygon zkEVM?</h2><p>A diferencia de otras soluciones de escalabilidad, Polygon zkEVM no solo es compatible con EVM de Ethereum, sino que también mejora significativamente <strong>su equivalencia</strong> con la EVM a través de pequeños cambios.</p><p>En esta primera parte, abordaremos los componentes de esta nueva arquitectura, el ciclo de vida de las transacciones en Polygon zkEVM, el esquema del puente Polygon zkEVM y otros aspectos importantes, pero primero empecemos viendo como Polygon zkEVM propone mejorar ETH e incorpora tecnologías valiosas como <strong>pruebas de validez</strong> de conocimiento cero (<strong>ZK</strong> - <strong>Validity Proof</strong>).</p><hr><h2 id="h-escalando-ethereum-con-zkevm" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🧗‍♂️Escalando Ethereum con zkEVM</h2><p>Como hemos visto en varias ocasiones, la blockchain de Ethereum basada en la tecnología de libro mayor distribuido (DLT), se enfrenta a un desafío conocido como el <strong>trilemma</strong> de <em>la escalabilidad, la descentralización y la seguridad</em>, lo que significa que no puede escalar más allá de su umbral de transacción sin sacrificar uno o más de estos factores.</p><p>Para abordar este problema, Polygon ha desarrollado la zkEVM, una máquina virtual que emula la EVM (máquina virtual Ethereum) y soporta todos los códigos de operación existentes en Ethereum. Esto permite la <strong>implementación transparente de Smart Contracts</strong> de Ethereum en la capa 2 de la red, lo que aumenta significativamente la escalabilidad y la cantidad de transacciones por segundo (TPS), mientras mantiene la seguridad de la capa principal de Ethereum</p><p>La zkEVM es una máquina de estado que procesa las transacciones de capa 2 enviadas por los usuarios a la red, generando pruebas de validez o Validity Proofs. Estas pruebas son <strong>rápidas y sencillas de verificar</strong>, garantizando la <strong>integridad de los cambios de estado</strong> realizados.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/07a9d06a2dd7c488b095548127baa65b839509d97fb76c9158f6b743cddd59f8.png" alt="Proceso de transacciones en zkEVM Polygon" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Proceso de transacciones en zkEVM Polygon</figcaption></figure><p>La red zkEVM de Polygon apunta a ser una red <strong>descentralizada, sin permisos, altamente segura y eficiente</strong>, diseñada para proporcionar una solución que reduzca la fricción para los usuarios y desarrolladores. Los esfuerzos de desarrollo permiten que <strong>cualquier persona</strong> que tenga el <strong>software zkEVM participe</strong> en la red. Además, el algoritmo de consenso brinda a todos la oportunidad de desempeñar el papel de <strong>Secuenciador</strong> o <strong>Agregador</strong> (también conocido como provers).</p><p>Hemos visto la importancia de la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/riUBdyBGEL30ggWNKy81WwvC8cynh_3oNpcbmwHNMms">DA en artículos anteriores desde L2 en Español</a>, y como <strong>esta disponibilidad de datos</strong> es crucial para la descentralización, pero el equipo de zkEVM aún <strong>tiene que decidir la mejor configuración</strong> para garantizar que no haya censura y que ninguna de las partes pueda controlar la red, por lo que no se puede definir uno establecido.</p><p>La <strong>seguridad</strong> es una consideración clave en la arquitectura de zkEVM, y como solución L2, la mayor parte de la seguridad <strong>se hereda de Ethereum</strong>. Los contratos inteligentes asegurarán que todos los que ejecutan cambios de estado lo hagan de manera adecuada, creen una prueba que acredite la validez de un cambio de estado y pongan a disposición pruebas de validez en la cadena para su verificación.</p><hr><h2 id="h-pil-stark" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🧬 PIL-STARK</h2><p>La tecnología zkEVM de Polygon tiene como objetivo crear una <strong>máquina de estado genérica</strong> que funcione como un <strong>procesador</strong>, con <strong>registros</strong> y un <strong>reloj</strong>. Esta máquina recibe instrucciones en forma de programas escritos en ensamblador y realiza transiciones de estado en cada pulso del reloj según estas instrucciones.</p><p>Consulte la figura a continuación para ver un ejemplo de una máquina de estado con los registros A y B y un estado que cambia a otro estado en función de dos instrucciones.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0c10088065bf9eef76d6507a5d4253583e31f690385364c1666327ab34a66e2f.png" alt="Gráfico de instrucciones de una máquina de estado genérica" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Gráfico de instrucciones de una máquina de estado genérica</figcaption></figure><p>Para implementar pruebas ZK en zkEVM de Polygon, se ha desarrollado una implementación especial de <strong>STARK</strong> llamada <strong>PIL-STARK</strong>. Esta implementación utiliza el lenguaje de dominio específico <strong>PIL (Polynomial Identities Language)</strong>, para nombrar polinomios y describir las identidades que definen los cálculos realizados por la máquina de estado. Además, se basa en el protocolo <strong>FRI</strong> para su esquema de Compromiso polinómico.</p><p>Si desea obtener más información acerca de las matemáticas y el funcionamiento detrás del lenguaje Polynomial PIL, puede revisar el vídeo que hemos dejado a continuación para tener una mejor comprensión. A continuación, profundicemos en la arquitectura de zkEVM y sus componentes principales.</p><div data-type="youtube" videoId="639DZpIC0Fc">
      <div class="youtube-player" data-id="639DZpIC0Fc" style="background-image: url('https://i.ytimg.com/vi/639DZpIC0Fc/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=639DZpIC0Fc">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><hr><h2 id="h-arquitectura-polygon-zkevm" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🏗️ Arquitectura Polygon zkEVM</h2><p>La arquitectura de Polygon zkEVM se enfoca en manejar las transiciones de estado, que resultan de las ejecuciones de transacciones de la capa 2 enviadas por los usuarios a la red.</p><p>Los <strong>componentes principales de Polygon zkEVM</strong> que permiten su funcionamiento eficiente y seguro son los siguientes:</p><ul><li><p>Contrato de consenso: <code>PolygonZkEVM.sol</code></p></li><li><p>zkNode</p><ul><li><p>Sincronizador</p></li><li><p>Secuenciadores y Agregadores</p></li><li><p>RPC</p></li></ul></li><li><p>zkProver</p></li><li><p>Puente zkEVM</p></li></ul><p>Cada uno de estos componentes desempeña un papel importante en el funcionamiento de la máquina virtual zkEVM de Polygon, en la mejora de la escalabilidad y las transacciones por segundo de Ethereum.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ce4e1d0ca1037ba0bbb11240ff8fb26ffd13b95cf8e9a721c09765bfe24ba516.png" alt="Arquitectura de los componentes principales de zkEVM" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Arquitectura de los componentes principales de zkEVM</figcaption></figure><hr><h2 id="h-contrato-de-consenso" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🤝 Contrato de Consenso</h2><p>Como dato curioso, el equipo tras Hermez siempre ha innovado en la descentralización de los rollups. De hecho, la versión anterior, Polygon Hermez 1.0, un ZK Rollup para pagos instantáneos, se basó en el mecanismo de consenso llamado <strong>Prueba de Donación (PoD)</strong>. Esta fue básicamente una subasta descentralizada realizada automáticamente, en la que los participantes (coordinadores) ofrecían un cierto número de tokens para ser elegidos y crear el siguiente bloque.</p><p>En el antiguo mecanismo de PoD, se establecieron incentivos económicos para que los validadores fueran altamente eficientes y competitivos, ya que se basaba en un modelo de subasta descentralizado para obtener el derecho de producir bloques en un plazo específico.</p><p>El nuevo Contrato de Consenso, <code>PolygonZkEVM.sol</code>, aprovecha la experiencia del mecanismo de PoD de la versión 1.0, pero con la adición del soporte para múltiples coordinadores sin permiso para producir bloques en la capa 2.</p><p>Esta <strong>última versión</strong> del Contrato de Consenso zkEVM (desplegado en la capa 1) se modela después de la <strong>Prueba de Eficiencia (Proof of Efficiency)</strong>. Aprovecha la experiencia del mecanismo PoD existente en la versión 1.0 y agrega soporte para <strong>múltiples coordinadores sin permiso</strong> para producir bloques en la capa 2.</p><p>En <strong><em>la parte dos</em></strong> de esta serie se tratarán otros temas, incluyendo su Modelo de Implementación, tokenomics y estructura de incentivación, si desea aprender más sobre ellos.</p><hr><h2 id="h-que-es-zknode" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🤖🔗 ¿Qué es zkNode?</h2><p>El zkNode es el software necesario para ejecutar cualquier nodo zkEVM en la red Polygon. Funciona como un cliente que ayuda a implementar la sincronización y a gobernar los roles de los participantes, ya sean Secuenciadores o Agregadores.</p><p>Los usuarios de Polygon zkEVM pueden <strong>elegir</strong> participar en la red como un <strong>simple nodo</strong> para conocer el estado de la red, o como <strong>participante</strong> en el <strong>proceso de producción</strong> por lotes en cualquiera de los dos roles mencionados anteriormente. La arquitectura del <strong>zkNode es modular</strong> para mayor flexibilidad y eficiencia.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2d305f14276aa61a68e0002aa9af0bf570266084f58a8856d7e68da24fe177b7.png" alt="Diagrama de la arquitectura de zkNode" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Diagrama de la arquitectura de zkNode</figcaption></figure><p>El zkNode se puede utilizar en tres modos diferentes: <strong>Secuenciador, Agregador y RPC.</strong></p><p><strong>Modo Secuenciador:</strong> el nodo zkNode cuenta con una instancia de Estado L2, una API integrada para manejar las interacciones de los usuarios L2 <em>(como solicitudes de transacción y consultas de Estado L2)</em> y gestiona la transmisión por <em>batch</em> a otros nodos de la red L2. También cuentan con una base de datos para almacenar temporalmente las transacciones que aún no han sido ordenadas ni ejecutadas <em>(pool de transacciones pendientes)</em>, así como todos los componentes necesarios para interactuar con L1 y mantener su Estado L2 local actualizado</p><p><strong>Modo Agregador:</strong> el nodo zkNode cuenta con todos los componentes necesarios para ejecutar <em>batch</em> de transacciones, calcular el Estado L2 resultante y generar las pruebas de integridad computacional llamadas Validity Proof. Además, puede obtener <em>batch</em> de transacciones comprometidos en L1 por el Secuenciador de Confianza y verificar públicamente las transiciones de Estado L2 en L1 mediante la llamada a funciones específicas.</p><p><strong>Modo RPC:</strong> el nodo zkNode tiene una funcionalidad limitada. Principalmente mantiene una instancia actualizada del Estado L2, utilizando los <em>batch</em> transmitidos por el Secuenciador de Confianza y las secuencias de <em>batch</em> obtenidos del Contrato de Consenso. Además, el nodo interactúa con L1 de manera continua para mantener el Estado L2 local actualizado y verificar la sincronización de las raíces de Estado L2. La tasa de sincronización predeterminada del sincronizador es de cada 2 segundos, aunque se puede modificar en la configuración.</p><hr><h2 id="h-como-funciona-zkprover" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🕵️ ¿Cómo funciona zkProver?</h2><p>Ahora nos centraremos en resumir la descripción general esquelética del zkEVM que emplea tecnología avanzada de ZK para crear Validity Proof. Utiliza un <strong>zkProver</strong> que se puede ejecutar en cualquier servidor y está diseñado para ser compatible con la mayoría del hardware de consumo. Cada <strong>Agregador</strong> utilizará este zkProver para validar <em>batch</em> y proporcionar Validity Proof.</p><p>El zkProver consta de un <strong><em>Ejecutor de Máquina de Estado Principal</em></strong>, una colección de <strong>Máquinas de Estado secundarias</strong> (cada una con su propio ejecutor), <strong>un generador de pruebas STARK y un generador de pruebas SNARK</strong>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9ea6915745cee2c08e6782cb8836b91df49a56322e563a9f415dc0d51d8121f5.png" alt="Arquitectura de un zkProver" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Arquitectura de un zkProver</figcaption></figure><p>El zkEVM expresa los cambios de estado en forma polinómica. Como resultado, las restricciones que debe cumplir cada <em>batch</em> propuesto son restricciones polinómicas o identidades polinomiales. Para decirlo de otra manera, <strong>todos los <em>batch</em> válidos deben satisfacer restricciones polinómicas específicas</strong>, aunque veremos más sobre el proceso en <strong><em>la segunda* *parte</em></strong> del artículo.</p><hr><h2 id="h-ciclo-de-vida-de-las-transacciones" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🔄 Ciclo de vida de las transacciones</h2><p>Para realizar cualquier transacción en Polygon zkEVM, los usuarios necesitan disponer de fondos en esta capa. Esto se logra mediante la transferencia de una cantidad de éter desde L1 a L2 a través del puente zkEVM de Polygon.</p><h3 id="h-que-es-el-puente-zkevm" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🌉 ¿Qué es el puente zkEVM?</h3><p>El puente zkEVM de Polygon es un contrato inteligente que permite la transferencia segura de activos entre dos capas (L1 y L2). Este puente es descentralizado y consta de dos contratos inteligentes, uno en L1 y otro en L2. El contrato del puente L1 se encarga de administrar las transferencias de activos entre rollups, mientras que el contrato del puente L2 se responsabiliza de las transferencias de activos entre Mainnet y el Rollup.</p><div data-type="youtube" videoId="z44yN5ApOE8">
      <div class="youtube-player" data-id="z44yN5ApOE8" style="background-image: url('https://i.ytimg.com/vi/z44yN5ApOE8/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=z44yN5ApOE8">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><p>El ciclo de vida de las transacciones en L2 comienza con la transferencia de <em>ether</em> desde L1 a L2 a través del puente zkEVM. La interoperabilidad de L2 permite migrar activos entre diferentes redes nativamente, y el puente zkEVM de Polygon se encarga de asegurar la comunicación y migración de activos entre la red Polygon zkEVM y otras redes. Los contratos inteligentes L1 en los rollups L2 garantizan la correcta gestión de las transiciones de estado L2 y la disponibilidad de datos. Ahora, veamos cómo es el esquema del puente.</p><h3 id="h-esquema-del-puente-polygon-zkevm" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🔗 Esquema del puente Polygon zkEVM</h3><p>El esquema del puente Polygon zkEVM implica dos redes (L1 y L2). Para mover un activo entre ambas redes, un usuario debe bloquear el activo en la red de origen (Capa 1). El contrato inteligente del puente crea un activo representativo de valor equivalente en la red de destino L2, que se conoce como Token envuelto.</p><p>Una vez acuñado el Token envuelto, el usuario o destinatario en la red de destino L2 puede reclamar el activo. También es posible realizar la operación opuesta; después de quemar el token envuelto, el Bridge SC desbloquea el activo original en la red de origen.</p><p>El Bridge SC también puede utilizarse para la mensajería entre cadenas, lo que permite enviar cargas de datos de una red a otra a través de las operaciones Puente y Reclamación.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d73da7c5365a1731ae8ab2b822ff29fde57808d2ffb80e1c586db41555857807.png" alt="Esquema del Bridge Smart Contract en Polygon zkEVM" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Esquema del Bridge Smart Contract en Polygon zkEVM</figcaption></figure><h3 id="h-caracteristicas-del-contrato-zkevm-bridge" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">📄 Características del contrato zkEVM Bridge</h3><p>El zkEVM Bridge SC se implementa utilizando el diseño del <strong><em>contrato de depósito de Ethereum PoS</em></strong> como base, pero con algunas modificaciones. Por ejemplo, <strong>en lugar de utilizar árboles Merkle</strong> convencionales, emplea árboles <strong>Merkle de agregación especialmente diseñados</strong>. A pesar de estas diferencias, la lógica subyacente del contrato zkEVM Bridge es la misma que la del Contrato de Depósito de Ethereum.</p><p>Además de las diferencias mencionadas en la implementación del contrato zkEVM Bridge en comparación con el Contrato de Depósito de Ethereum 2.0, hay otras relacionadas con el hash base y los nodos hoja:</p><ol><li><p>El Contrato de Depósito utiliza la función <code>hash SHA256</code>, mientras que zkEVM utiliza la función <code>hash Keccak</code>. La razón detrás de esta elección es que, además de ser compatible con EVM, la función <code>hash Keccak</code> tiene un costo de gas más bajo en la red Ethereum.</p></li><li><p>El contrato Bridge genera tokens envueltos la primera vez que se agrega un nuevo token a la red zkEVM. Además, se <strong>agregan los metadatos del token</strong> ERC20, como <em>el nombre, el número de decimales o el símbolo</em>, a la información contenida en la hoja.</p></li></ol><p>La característica principal del contrato inteligente Polygon zkEVM Bridge es el uso de <strong>Árboles de Salida</strong> (<code>Exit Trees</code>) y el <strong>Árbol de Salida Globa</strong>l (<code>Global Exit Tree)</code>, con la raíz del árbol de salida global que sirve como la fuente principal de la verdad del estado.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b623f93afd12fb71f9e03ea79ca538214cc63dc90d60c0aa3474db3a3380e386.png" alt="Ejemplo visual de una Salida en el uso de Exit Trees" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Ejemplo visual de una Salida en el uso de Exit Trees</figcaption></figure><p>El uso de dos distintos administradores de <strong>Raíz</strong> <strong>de Salida Global</strong> (<code>Global Exit Root</code>) para L1 y L2, así como lógica separada para el contrato Bridge SC y cada uno de estos administradores de raíz de salida global, permite una amplia interoperabilidad de red.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e364e50a6cbfac325874f885d1890b7e818313d24603df713969ff49130e44a3.png" alt="Diagrama de la interactividad entre zkEVM Bridge L2-L1 " blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Diagrama de la interactividad entre zkEVM Bridge L2-L1</figcaption></figure><p>Cualquier nodo de L1 y L2 puede validar todas las transferencias de activos gracias a la DA. El zkEVM Bridge SC desplegado en L1 utiliza la <code>función Claim</code> para finalizar las transferencias y el Agregador recibe una compensación en tokens <strong>MATIC</strong> por su función. La cantidad de tokens ganados por cada secuencia agregada, llamada <code>batchReward</code>, se determina por el saldo total del contrato MATIC y el número de secuencias agregadas.</p><p>Si deseas aprender más sobre el árbol de estado utilizado en zkEVM y sus características, te recomendamos ver el siguiente vídeo</p><div data-type="youtube" videoId="FJWCJ5s_PiY">
      <div class="youtube-player" data-id="FJWCJ5s_PiY" style="background-image: url('https://i.ytimg.com/vi/FJWCJ5s_PiY/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=FJWCJ5s_PiY">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><hr><h2 id="h-equivalencia-o-compatibilidad" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🔌 ¿Equivalencia o compatibilidad?</h2><p>En el siguiente análisis evaluaremos las propuestas de zkEVM en cuanto a su compatibilidad o equivalencia con EVM. Para obtener más información, te invitamos a revisar nuestro artículo <strong>&quot;Comparando las zkEVM en testnet&quot;</strong>, donde examinamos en detalle las diferentes implementaciones de zkEVM y comparamos su rendimiento y funcionalidad en su red de prueba.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/YPGL8m1ve2aA_Ql6496f4yjuxkU1NIUSDM4EH6u10i0">https://mirror.xyz/layer2es.eth/YPGL8m1ve2aA_Ql6496f4yjuxkU1NIUSDM4EH6u10i0</a></p><p>En general, una solución compatible requeriría menos cambios en el código que una solución equivalente. Sin embargo, hay casos en los que incluso una solución compatible puede requerir cambios significativos en el código, especialmente si las dos soluciones son muy diferentes en su diseño o arquitectura.</p><p><strong>El objetivo de lograr la equivalencia es tener una solución que sea lo más similar posible a la solución original</strong>, lo que minimiza los cambios necesarios en el código y reduce el riesgo de introducir nuevas vulnerabilidades de seguridad. Además, la <strong>equivalencia permite</strong> que las aplicaciones, herramientas e infraestructura creadas para la solución original <strong>sean compatibles de manera más efectiva</strong> con la nueva solución.</p><h3 id="h-modificaciones-de-opcodes-en-zkevm-vs-evm" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🔧 Modificaciones de opcodes en zKEVM vs EVM</h3><p>Los <code>opcodes</code> en zkEVM son las instrucciones básicas que permiten la ejecución de contratos inteligentes en la cadena de bloques. En comparación con EVM, zkEVM ha realizado algunos cambios en los <code>opcodes</code> para mejorar la seguridad y el rendimiento.</p><p>La siguiente sección detalla los cambios que se han realizado en los <code>opcodes</code> en zKEVM en comparación con EVM:</p><ul><li><p><code>AUTODESTRUCT:</code> Ha sido eliminado y reemplazado por ENVIAR.</p></li><li><p><code>EXTCODEHASH:</code> Devuelve el hash del código de bytes del contrato del árbol de estado zkEVM sin verificar si la cuenta está vacía.</p></li><li><p><code>DIFFICULTY:</code> Devuelve &quot;0&quot; en lugar de un número aleatorio como en el EVM.</p></li><li><p><code>BLOCKHASH:</code> Devuelve todos los hash de bloque anteriores en lugar de solo los últimos 256 bloques. <code>BLOCKHASH</code> es la raíz del estado al final de una transacción procesable y se almacena en el contrato inteligente del sistema.</p></li><li><p><code>NUMBER:</code> Devuelve el número de transacciones procesables.</p></li></ul><h3 id="h-contratos-precompilados-en-zkevm" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">📦💻 Contratos precompilados en zKEVM</h3><p>Los contratos precompilados en zkEVM son programas que se ejecutan automáticamente en la cadena de bloques sin la necesidad de ser invocados directamente por un contrato inteligente. En zkEVM, algunos de los contratos precompilados son diferentes a los de EVM:</p><ul><li><p><code>eRecover:</code> Permite la recuperación de una clave pública a partir de una firma y un hash de mensaje.</p></li><li><p><code>identity:</code> Proporciona una manera segura de verificar la identidad de un usuario en la cadena de bloques.</p></li></ul><p>Los demás contratos precompilados no tienen efecto en el árbol de estado zkEVM y se tratan como un <code>revert</code>, devolviendo todo el gas al contexto anterior y estableciendo el <code>success</code> bandera a <strong>&quot;0&quot;</strong>.</p><h3 id="h-otras-diferencias-menores-en-zkevm" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🧐 Otras diferencias menores en zKEVM</h3><p>En la implementación de zkEVM, cuando <strong>se despliega un contrato en una dirección, el almacenamiento no se limpia</strong> (es decir, no se borra). Esto se debe a la manera en que está diseñado el árbol de estado de zkEVM, que <strong>no requiere borrar el almacenamiento</strong> cuando se despliega un contrato, otras diferencias son:</p><ul><li><p>El opcode <code>JUMPDEST</code> está permitido en push bytes para evitar el análisis de bytecode en tiempo de ejecución.</p></li><li><p>La zkEVM implementa <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-3541">EIP-3541</a> de la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethereum.org/en/history/#london">Hardfork de Londres</a>.</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-2718">EIP-2718</a>, que define el <em>Typed Transaction Envelope</em>, <strong>no es compatible.</strong></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-2930">EIP-2930,</a> que define el tipo de transacción <em>Optional Access Lists</em>, <strong>no es compatible.</strong></p></li></ul><p>Como hemos podido comprobar la compatibilidad y la equivalencia son objetivos diferentes, y aunque ambas buscan facilitar la integración entre diferentes soluciones, la equivalencia tiene como objetivo lograr una integración más profunda y sin problemas que la compatibilidad. En el caso de Polygon zkEVM, el objetivo es lograr la equivalencia con el EVM de Ethereum, lo que permite una integración profunda y sin problemas entre ambas soluciones.</p><h3 id="h-eficiencia-y-estrategia-general" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">📊 Eficiencia y estrategia general</h3><p>Para terminar esta primera parte de la serie repasemos como la eficiencia es clave para el rendimiento de la red. zkEVM aplica varias estrategias de implementación para garantizar la eficiencia. A continuación se enumeran algunas de ellas:</p><ul><li><p><strong>La primera estrategia:</strong> Desplegar un Contrato de Consenso, que incentiva a los Agregadores más eficientes a participar en el proceso de generación de pruebas.</p></li><li><p><strong>La segunda estrategia:</strong> Llevar a cabo todos los cálculos fuera de la cadena mientras se mantienen solo los datos necesarios y las pruebas ZK en la cadena.</p></li><li><p><strong>La tercera estrategia:</strong> Forma en que se implementa el contrato inteligente de puente, como la liquidación de cuentas de manera UTXO, utilizando solo las raíces del árbol de salida.</p></li><li><p><strong>Estrategias combinadas:</strong> Utilización de primitivas criptográficas especializadas dentro del zkProver para acelerar los cálculos y minimizar el tamaño de las pruebas, como se ve en:</p><ul><li><p>Ejecución de un lenguaje de ensamblaje ZK (zkASM) para la interpretación de códigos de bytes.</p></li><li><p>Uso de herramientas ZK como zk-STARKs para fines de demostración, estas pruebas son muy rápidas, aunque son más grandes en tamaño.</p></li><li><p>En lugar de publicar las pruebas zk-STARK de gran tamaño como pruebas de validez, se utiliza un zk-SNARK para atestar la corrección de las pruebas zk-STARK. Estos zk-SNARK se publican a su vez como pruebas de validez de los cambios de estado. Esto ayuda a reducir los costos de gas de 5 millones a 350K.</p></li></ul></li></ul><p>La red zkEVM de Polygon se ha propuesto ofrecer una solución eficiente y de baja fricción para los usuarios y desarrolladores de aplicaciones descentralizadas. Esto ha sido posible gracias a la implementación de estrategias de eficiencia, como las descritas anteriormente. Con esto hemos aprendido cómo Polygon está ofreciendo una solución de cadena de bloques eficiente y de baja fricción a través de su red zkEVM.</p><h2 id="h-agradecimientos" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Agradecimientos</h2><p>🎉 ¡Gracias por leer hasta el final! Si está interesado en seguir aprendiendo y colaborando con nosotros, le invitamos a revisar nuestra biblioteca sobre <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/Polygon-zkEVM-2261f6649f2f44648838431982106443">zkEVM Polygon</a> para obtener más detalles y también nuestra <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/39d63a8af9ca4524a7237b1f2456e745">Biblioteca de Layer 2 en Español</a> para estar actualizado sobre diversas soluciones.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d1d6a36a9dee9ce9e74626192bcb5bd59a08e64b10ef5c50551a31b1cf0b65f6.png" alt="Biblioteca de Layer 2 en Español" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Biblioteca de Layer 2 en Español</figcaption></figure><p>En la segunda parte, profundizaremos en el funcionamiento de Proof of Efficiency, la gestión de estados del Rollup L2 y proporcionaremos ejemplos visuales del explorador de bloques para una mejor comprensión.</p><p>Además, le invitamos a unirse a nuestra vibrante comunidad de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/l2espaniol">Telegram L2 en Español</a> y a seguirnos en nuestro Twitter L2 en Español. Allí encontrará una gran cantidad de información sobre Layer 2 y el ecosistema de Blockchain en general. ¡Te Esperamos!</p>]]></content:encoded>
            <author>layer2es@newsletter.paragraph.com (L2 en Español)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/4ef25ef3ea814cf8e70770dc49e1cab1022245184f203ebd73de71725a83ef92.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Introducción a la Data Availability]]></title>
            <link>https://paragraph.com/@layer2es/introducci-n-a-la-data-availability</link>
            <guid>pqPqn1FaFYWdVw3ioXsc</guid>
            <pubDate>Fri, 28 Apr 2023 22:39:29 GMT</pubDate>
            <description><![CDATA[📌IntroducciónUno de los conceptos que más se repiten en la industria cripto es “trustless”, lo cual significa en esencia que no debes confiar en nadie sin validarlo primero. Es por esto que las blockchains poseen nodos completos, los cuales descargan y ejecutan la data que proporcionan los “bloques” (blocks en inglés) y se aseguran que los cálculos propuestos por el block producer coinciden precisamente con los cálculos hechos por el validador. De esta manera, los nodos verifican que esta nu...]]></description>
            <content:encoded><![CDATA[<h2 id="h-introduccion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">📌Introducción</h2><p>Uno de los conceptos que más se repiten en la industria cripto es “<strong>trustless</strong>”, lo cual significa en esencia que no debes confiar en nadie sin validarlo primero.</p><p>Es por esto que las <em>blockchains</em> poseen nodos completos, los cuales descargan y ejecutan la <strong><em>data</em></strong> que proporcionan los “<strong>bloques</strong>” (<strong><em>blocks</em></strong> en inglés) y se aseguran que los cálculos propuestos por el <em>block producer</em> coinciden precisamente con los cálculos hechos por el validador. De esta manera, los nodos verifican que esta nueva información es válida en lugar de tener que confiar ciegamente en que los <strong><em>block producers</em></strong> (en español, <strong>productores de bloques</strong>) son honestos.</p><p>De lo dicho anteriormente podemos decir que <strong>no es posible validar cálculos si falta algún dato</strong>. Y es allí donde la <strong><em>Data Availability</em></strong> entra en escena.</p><hr><h1 id="h-que-es-la-data-availability-da" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🤷‍♂️¿Qué es la Data Availability (DA)?</h1><p>En términos de una blockchain, la <strong><em>Data Availability</em></strong>, o “<strong>Disponibilidad de datos</strong>” en español, se refiere a la capacidad de los nodos de la red para acceder a la información de los <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethereum.org/en/developers/docs/blocks/"><em>blocks</em></a> almacenados en la blockchain. Esto incluye <strong>la capacidad de leer y verificar los datos, así como la capacidad de escribir y reproducir de nuevo los mismos datos para su verificación</strong>.</p><p>Asegurar la <strong><em>Data Availability</em></strong> es crucial para el funcionamiento de una <em>blockchain</em>, ya que permite a los nodos participar en el proceso de consenso y garantiza que la <em>blockchain</em> pueda continuar funcionando incluso si algunos nodos fallan o se desconectan.</p><p>Podemos decir entonces que la <strong><em>Data Availability</em></strong> depende de la información que contienen los <em>blocks</em>. Por su parte los <em>blocks</em> están conformados por 2 partes:</p><ul><li><p><strong><em>Block Head</em>:</strong> este contiene información (<em>metadata</em>) sobre el <em>block</em>. Esto incluye el número del <em>block</em>, el hash del <em>block</em>, la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://academy.bit2me.com/timestamp-blockchain/#:~:text=El%20timestamp%20o%20marca%20de,validado%20por%20la%20red%20blockchain."><em>timestamp</em></a>, etc.</p></li><li><p><strong><em>Block Body</em>:</strong> El cuerpo de <em>block</em> consiste en todos los datos de transacciones procesados como parte del <em>block</em> en cuestión.</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/19f16247d2eff087edbd69945ed5548f8efacf748b9a9c7691e736cef550acd5.png" alt="Partes de un block. Fuente: www.researchgate.net" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Partes de un block. Fuente: www.researchgate.net</figcaption></figure><hr><h2 id="h-como-funciona-la-verificacion-de-un-block" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🤔¿Cómo funciona la verificación de un block?</h2><p>En primer lugar, el <em>block producer</em>:</p><ol><li><p>Toma transacciones de la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://academy.binance.com/es/glossary/mempool"><em>mempool</em></a>.</p><p>(La <strong><em>mempool</em></strong> es un mecanismo que actúa como una “<strong>sala de espera</strong>” para las transacciones que aún no han sido incluidas en un <em>block</em>)</p></li><li><p>Produce un nuevo <em>block</em> con esas transacciones con un orden específico.</p></li><li><p>Transmite el nuevo <em>block</em> a la red <em>P2P</em> de validadores para que sea agregado a la <em>chain</em>.</p><p>(En una red de “<strong><em>Proof of work</em></strong>” se llama al <em>block</em> <em>producer</em> &quot;<strong><em>miner</em></strong>&quot;, mientras que en una red de “<strong><em>Proof of stake</em></strong>” se llama &quot;<strong><em>validator</em></strong>&quot;.)</p></li></ol><p>A continuación, los nodos validadores (también conocidos como <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.alchemy.com/overviews/archive-nodes">nodos completos</a> o <strong>Full nodes</strong> en inglés):</p><ol><li><p>Descargan la <strong><em>data</em></strong> de las transacciones del <em>block</em> recién propuesto.</p></li><li><p>Reejecutan las transacciones para confirmar su cumplimiento con las reglas de consenso.</p></li><li><p>Agregan el <em>block</em> a la cabeza de la <em>chain</em> una vez que la red determina que el <em>block</em> es válido.</p><p>La siguiente ilustración se encuentra un como ejemplo de una <em>block verification</em>:</p></li></ol><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/24c1d072bd5eb577ad2747a004dce9230f7864002d5771bacae09c3cdd0ffebe.png" alt="Verificación de un Block. Fuente: www.researchgate.net" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Verificación de un Block. Fuente: www.researchgate.net</figcaption></figure><hr><h2 id="h-los-desafios-de-la-data-availability" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">👊Los desafíos de la Data Availability</h2><p>Como se mencionó previamente, la <strong><em>Data Availability</em></strong> es esencial para la mayoría de las <em>blockchains</em>. Sin embargo, mantener esta disponibilidad puede ser complicado y está sujeto a problemas. <em>¿Cuáles son los desafíos comunes asociados a la disponibilidad de datos?</em> Pues tenemos dos grandes desafíos que deben abordarse:</p><ol><li><p>Requerir que los nodos de la <em>blockchain</em> descarguen y verifiquen los datos <strong>puede reducir el rendimiento, o sea, la escalabilidad</strong>.</p></li><li><p>El uso de almacenamiento <em>on-chain</em> para una cantidad cada vez mayor de datos <strong>limita intrínsecamente el número de entidades que pueden ejecutar nodos</strong>.</p></li></ol><p>Las redes <strong><em>blockchain</em> monolíticas</strong> (ejemplo: Bitcoin, Solana o Ethereum hoy) garantizan la <strong><em>Data Availability</em></strong> almacenandola en varios nodos para que los participantes de la red que necesiten esta información puedan solicitarla a otro <em>peer</em> (“par” en español) o nodo de la red. Por desgracia, esta implementación de la disponibilidad de datos <strong>incluye numerosos problemas</strong>.</p><p>Requerir que un gran número de nodos descarguen, almacenen y verifiquen los mismos datos <strong>reduce significativamente el rendimiento</strong> de las <em>blockchains</em>. Esta es la razón por la que la velocidad de procesamiento de las redes blockchain como Ethereum y Bitcoin es relativamente baja.</p><p>Por otro lado, el almacenamiento de datos en la <em>chain</em> también conlleva un aumento significativo del tamaño de la blockchain, lo que resulta en un aumento exponencial de los requisitos de <em>hardware</em> para los llamados nodos completos, que necesitan acumular mayores cantidades de <em>states</em>. Además, el aumento de los costes de <em>hardware</em> <strong>reduce el número de individuos o entidades con recursos suficientes para correr nodos</strong>, lo que contribuye al riesgo de <strong>centralización</strong>.</p><hr><h1 id="h-diferencia-entre-storage-data-availability-da-y-data-availability-committee-dac" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🎭Diferencia entre Storage, Data Availability (DA) y Data Availability Committee (DAC)</h1><p>El término &quot;<strong><em>Storage</em></strong>&quot; se refiere al proceso de almacenamiento de datos en una red. En el contexto de las criptomonedas, se utiliza para hacer referencia al almacenamiento de información de las transacciones en la <em>blockchain</em>. La <em>blockchain</em> es una base de datos distribuida que almacena todos los registros de las transacciones realizadas en la red. El proceso de &quot;<strong><em>Storage</em></strong>&quot; garantiza que los datos se almacenen de manera segura y permanente, lo que asegura la integridad y transparencia de las transacciones en la red.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2946cfeccd4b3a5987d67622220455dcdbf162c02ab4e0a20f94b67d17bc4770.png" alt="Almacenamiento Físico. www.malwarebytes.com" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Almacenamiento Físico. www.malwarebytes.com</figcaption></figure><p>Por otro lado, &quot;<strong><em>Data Availability</em></strong>&quot; hace referencia a la disponibilidad de los datos en la red. Su objetivo es asegurar que los datos almacenados en la blockchain estén disponibles para los nodos de la red en todo momento. Esto es esencial para el correcto funcionamiento de la red, ya que cualquier interrupción o pérdida de datos podría generar graves problemas.</p><p>Finalmente, el &quot;<strong><em>Data Availability Committee</em></strong>&quot; es un grupo de personas o entidades que manejan nodos en conjunto para garantizar la disponibilidad de los datos en la red. Este comité está conformado por diferentes nodos y su objetivo principal es asegurar que los datos estén disponibles en todo momento. Los miembros del comité supervisan la disponibilidad de los datos y toman medidas inmediatas en caso de que se produzca alguna interrupción.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/877a5ce7a04fb4cbdd7eb814ffad2ea9c43a7b9de8946b2b71455e891fa233c8.png" alt="Comité. Fuente: https://westsiderc.org/" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Comité. Fuente: https://westsiderc.org/</figcaption></figure><p>En conclusión, en la industria cripto, el proceso de &quot;<strong><em>Storage</em></strong>&quot; se encarga del almacenamiento de datos en la <em>blockchain</em>, la &quot;<strong><em>Data Availability</em></strong>&quot; garantiza la disponibilidad de los datos en la red y el &quot;<strong><em>Data Availability Committee</em></strong>&quot; son un grupo de nodos que se encargan de supervisar y garantizar que los datos estén siempre disponibles. Estos tres conceptos son fundamentales para asegurar la seguridad y el correcto funcionamiento de la red en la industria cripto.</p><hr><h2 id="h-tipos-de-sistemas-de-data-availability-en-blockchain" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">📊Tipos de sistemas de Data Availability en blockchain</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6e546036e8dca6140633999f326e97ff975fc8a48d8b1d1ed6c859439f07750c.png" alt="Enfoque Monolítico y Modular. Fuente: https://blog.celestia.org/modular-vs-monolithic-a-beginners-guide/" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Enfoque Monolítico y Modular. Fuente: https://blog.celestia.org/modular-vs-monolithic-a-beginners-guide/</figcaption></figure><h3 id="h-on-chain-data-availability" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">⛓On-chain Data Availability</h3><p>La solución convencional para abordar la <strong><em>Data Availability</em></strong> consiste en exigir a los block producer que publiquen todas las transacciones on-chain y que los nodos de validación las descarguen. Esta <strong><em>On-chain Data Availability</em></strong> es una característica de las &quot;<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/watch?v=pHBktwEswec"><em>blockchains</em> monolíticas</a>&quot;, las cuales se encargan de la <strong><em>Data Availability</em></strong>, la ejecución de transacciones y el consenso <strong>en una sola <em>layer</em></strong>. Ethereum, por ejemplo, almacena datos de estado de manera redundante en toda la red para garantizar que los nodos tengan acceso a los datos necesarios para reproducir transacciones, verificar actualizaciones de estado y señalar transiciones de estado no válidas.</p><p>No obstante, esta <strong><em>On-chain Data Availability</em></strong> puede representar un obstáculo para la escalabilidad. Las <strong><em>blockchains</em> monolíticas</strong> suelen tener velocidades de procesamiento lentas debido a que los nodos deben descargar cada <em>block</em> y reproducir las mismas transacciones. Además, requiere que todos los nodos almacenen cantidades cada vez mayores de estado, lo que puede afectar la descentralización. Si el estado de Ethereum aumenta, los validadores deberán invertir en máquinas más grandes, lo que probablemente reduciría el número de personas dispuestas a ejecutar un nodo validador.</p><h3 id="h-off-chain-data-availability" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">💾Off-chain Data Availability</h3><p>La <strong><em>Off-chain Data Availability</em></strong>  se refiere a sistemas que trasladan el almacenamiento de datos de la <em>blockchain</em> a otra <em>layer</em>, lo que <strong>permite obtener escalabilidad sin aumentar los requisitos de nodos</strong>. Este tipo de <em>DA</em> es la utilizada por las <strong><em>blockchains</em> modulares</strong>, la <em>chain</em> gestiona algunas tareas como la ejecución de transacciones y el consenso, mientras que otras, como la <strong><em>Data Availability</em></strong>, se descargan en otra <em>layer</em>.</p><p>Por ejemplo, las soluciones de escalado como <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethereum.org/en/developers/docs/scaling/validium/"><em>validiums</em></a> y <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethereum.org/en/developers/docs/scaling/plasma/"><em>plasma</em></a> utilizan el almacenamiento <em>off-chain</em> para separar la <strong><em>Data Availability</em></strong> del consenso y la ejecución. Aunque esta técnica mejora la eficiencia, también tiene <strong>implicaciones negativas</strong> para la descentralización, la seguridad y la confianza, ya que los participantes deben confiar en los <em>block producers</em> para que no incluyan transacciones no válidas en los <em>blocks</em> propuestos.</p><p>Para evitar estos problemas, algunas soluciones de escalado, como los <strong><em>Optimistic Rollups</em></strong> y los <strong><em>ZK Rollups</em></strong>, almacenan los datos de las transacciones en la <em>blockchain</em> matriz, como Ethereum, utilizando esta <em>mainnet</em> como <em>layer</em> de <strong><em>Data Availability</em></strong>. De esta manera, se evita la necesidad de confiar en terceros, garantizando una mayor seguridad y descentralización.</p><hr><h2 id="h-soluciones-para-los-problemas-de-la-data-availability" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">📝Soluciones para los problemas de la Data Availability</h2><p>Los problemas de <strong><em>Data Availability</em></strong> están asociados a la capacidad de verificar si los datos de una transacción están disponibles para un <em>block</em> recién propuesto. Para resolver este problema, se necesitan mecanismos que garanticen la <strong><em>Data Availability</em></strong> de las transacciones. A continuación, se presentan 4 posibles soluciones:</p><h3 id="h-data-availability-sampling-das" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🧩Data Availability Sampling (DAS)</h3><p>Es un mecanismo criptográfico que permite a los nodos de la <em>blockchain</em> verificar que los datos están disponibles sin tener que descargar la totalidad de un <em>block</em>. En este sistema, <strong>los nodos toman pequeñas muestras aleatorias</strong> de diferentes partes del <em>block</em> simultáneamente para verificar la disponibilidad de los datos. Debido a que muchos nodos toman muestras de diferentes partes del bloque, la disponibilidad se puede verificar con gran certeza estadística.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7fba1f4a3f1ba9bf1e6ebafc18f6bbc782dd1902821ad26b534d98e8f66eb408.png" alt="Data Sampling. Fuente: https://hackmd.io/@vbuterin/sharding_proposal" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Data Sampling. Fuente: https://hackmd.io/@vbuterin/sharding_proposal</figcaption></figure><h3 id="h-data-availability-proofs" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">📜Data Availability Proofs</h3><p>Aunque el mecanismo <em>DAS</em> garantiza estadísticamente la disponibilidad de los datos de un <em>block</em>, los nodos maliciosos pueden ocultar datos. Por lo tanto, para resolver este problema, se puede combinar el DAS con la &quot;<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.computerweekly.com/es/definicion/Codigo-de-borrado-EC#:~:text=El%20c%C3%B3digo%20de%20borrado%20(Erasure,de%20almacenamiento%20o%20ubicaciones%20geogr%C3%A1ficas.">codificación de borrado</a>&quot; para crear <strong><em>Data Availability Proofs</em></strong>. La codificación de borrado <strong>es un método que permite a las redes duplicar conjuntos de datos añadiendo piezas redundantes</strong> conocidas como &quot;códigos de borrado&quot;. Si se pierden los datos originales, es posible utilizar códigos de borrado para reconstruir la información original.</p><h3 id="h-data-availability-committees-dac" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">👨‍👩‍👧‍👦Data Availability Committees (DAC)</h3><p>Son grupos de entidades autorizadas encargadas de <strong>mantener copias de los datos <em>off-chain</em> de la <em>blockchain</em></strong>. Un <em>DAC</em> está formado por miembros de confianza designados para esta función específica. Los productores de <em>blocks</em> deben enviar los datos de las transacciones a los miembros del <em>DAC</em> cuando realizan transiciones de estado. Aunque este método logra poner la información a disposición de los usuarios, tiene un <strong>efecto negativo en la descentralización</strong>, ya que se depende de los miembros del comité para disponer de la data.</p><h3 id="h-data-availability-committees-basados-en-proof-of-stake" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">💰Data Availability Committees basados en Proof of Stake</h3><p>Si bien los <em>Data Availability Committees</em> son mejores para asegurar la data, <strong>aún quedan huecos en la confianza</strong>. ¿Qué sucede si el <em>DAC</em> se asocia con el <em>block producer</em> para retener los datos de transacción? Los <em>DAC</em> suelen ser pequeños, lo que aumenta el riesgo de que sean sobornados y la posibilidad de que un actor externo comprometa al grupo.</p><p>Algunos <em>validiums</em> reemplazan los <em>DAC</em> con un sistema validador basado en <strong><em>proof of stake (PoS)</em></strong>. Aquí, <strong>cualquiera puede convertirse en validador</strong> y almacenar datos <em>off-chain</em>. Sin embargo, deben proporcionar un &quot;<strong>garantía o <em>bond</em></strong>&quot;, que se deposita en un <em>smart contract</em>. En caso de <strong>comportamiento malintencionado</strong>, como la retención de datos por parte del validador, <strong>está garantía será tomada como castigo</strong>.</p><p>Los <strong><em>Data Availability Committees basados en Proof of Stake</em></strong> son considerablemente más seguros que los <em>DAC</em> regulares. No solo son permisivos y <em>trustless</em>, sino que también tienen incentivos bien diseñados para fomentar un comportamiento honesto.</p><hr><h2 id="h-como-funciona-la-data-availability-layer-con-los-rollups" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🌌¿Cómo funciona la Data Availability Layer con los rollups?</h2><p>Los <strong><em>rollups</em></strong> otorgan escalabilidad a  Ethereum moviendo la computación y el almacenamiento del estado fuera del entorno de ejecución de Ethereum: la Máquina Virtual Ethereum (<strong><em>EVM</em></strong>). La <strong>EVM</strong> solo acepta resultados de la computación off-chain y los aplica a su estado sin tener que volver a ejecutar transacciones, mejorando así la velocidad de procesamiento y reduciendo costos.</p><p>Lo que hace que los <strong><em>rollups</em></strong> sean más seguros que otras soluciones de escalado de Ethereum, incluyendo las sidechains o Plasma, es su dependencia de Ethereum para la <strong><em>Data Availability</em></strong>. Además de publicar resultados de transacciones en Ethereum, los <strong><em>Optimistic rollups</em></strong>  y los <strong><em>ZK Rollups</em></strong> también publican datos de transacciones en la <em>Layer 1</em> como <strong><em>CALLDATA</em></strong>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7c6a9484541ccc3dcc70f323059a69885146c76d429ee2f69133ddd6a01f2bdb.png" alt="Soluciones de Escalabilidad de Ethereum. Fuente: https://twitter.com/MessariCrypto/status/1546886356277891078" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Soluciones de Escalabilidad de Ethereum. Fuente: https://twitter.com/MessariCrypto/status/1546886356277891078</figcaption></figure><p>Los datos de los blocks publicados desde un rollup a Ethereum están disponibles públicamente, lo que permite a cualquier persona ejecutar transacciones y validar la <em>rollup chain</em>. También promueve la <strong><em>censorship resistance</em></strong> (resistencia a la censura) porque los datos publicados pueden ser utilizados por los futuros productores de <em>blocks</em> para reconstruir el estado de la cadena y comenzar a producir nuevos <em>blocks</em>. Ningún operador de la <em>Layer</em> 2 puede congelar arbitrariamente la <em>chain</em> y censurar a los usuarios en el <em>rollup</em> debido a esta medida.</p><p>Con la <strong><em>Data Availability Layer</em></strong> proporcionando seguridad, los <em>rollups</em> pueden optimizar la escalabilidad. Por ejemplo, un <em>rollup</em> puede elegir <em>blocks</em> grandes y tiempos de <em>block</em> más rápidos para acelerar la velocidad de procesamiento. Si bien esto aumenta los requisitos de <em>hardware</em> para los nodos (la mayoría de los <em>rollups</em> tienen algunos &quot;<strong><em>supernodes</em></strong>&quot; que ejecutan transacciones), la <strong><em>Data Availability</em></strong> de estado permite que cualquiera desafíe transiciones de estado inválidas o produzca <em>blocks</em> para evitar la censura.</p><hr><h2 id="h-ejemplos-en-el-espacio-de-l2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🗂Ejemplos en el espacio de L2</h2><p>Los protocolos que utilizan <strong><em>Optimistic Rollups</em></strong> (como <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/Arbitrum-One-8a807a8154ed41d9a1554f8206321867">Optimism</a> o <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/Optimism-2623d3f6fd9a459ba1e5b07e89daa34a">Arbitrum One</a>) y <strong><em>ZK Rollups</em></strong> (como <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/zkSync-Era-5948dd56f580431a8de584a7ad428ba4">zkSync Era</a> o <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/Starknet-973f10f9c26c48e28f76f44506dd190b">Starknet</a>) usan la “<strong><em>Data Availability On-Chain</em></strong>”, ya que todos los datos necesarios para la construcción de Validity proofs y Fraud proofs son publicados en la cadena matriz de Ethereum (L1).</p><p>Por otro lado los <strong><em>Validiums</em></strong> como <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/Immutable-X-a55467c6dca04675a5e9dde750f42e9b">Immutable X</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/Sorare-ccada96ecb624ed58603023a23510125">Sorare</a> y <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/Rhino-fi-a73427efe8fd40d8b72b6950b736fe86">rhino.fi</a> , junto a la <strong><em>Optimistic Chain</em></strong>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/Arbitrum-Nova-e892fda4cd084834adf3f46be79f8d0c">Arbitrum Nova</a>, usan el esquema de <strong><em>Data Availability Committee</em></strong>, ya que la construcción de <strong><em>validity proofs</em></strong> se basa totalmente en datos que <strong>no están publicados <em>on-chain</em> (es decir, <em>Off-chain</em>)</strong>. Existe un <strong><em>Data Availability Committee</em></strong> (DAC) encargado de proteger y suministrar los datos.</p><p>Otro caso es <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/ApeX-bc4d13f8f2a44b81a9c487339593b5bb">Apex</a>, que almacena sus datos de manera externa, por lo que su <strong><em>Data Availability</em></strong> <em>se encuentra fuera de Ethereum o la red matriz. Por consecuencia la creación de sus </em><strong><em>validity proofs</em></strong> se basa totalmente en datos que <strong>no se publican <em>on-chain</em></strong>.</p><p>Por último está <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/Metis-Andromeda-16dd2dd1e7d242eca59805de7faa7fb6">Metis</a>, que con la ayuda de uno de sus socios, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.memolabs.org/">MemoLabs</a>, es capaz de almacenar y garantizar su <strong><em>Data Availability</em></strong> para operaciones a través del servicio de <strong><em>Storage</em></strong> descentralizado que ofrece <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.memolabs.org/">MemoLabs</a>. En pocas palabras Metis, utiliza un sistema <strong><em>DAC</em></strong> pero en vez de almacenar su data en su propio <strong><em>Storage</em></strong>, utiliza el de uno de sus <em>partners</em>.</p><hr><h1 id="h-conclusion" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">✅Conclusión</h1><p>La <strong><em>Data Availability</em></strong> en la cripto industria es esencial para entender y mejorar la escalibilidad de las <em>blockchains</em> monolíticas y modulares. La transparencia y la accesibilidad de los datos son clave para tomar decisiones informadas y precisas de cómo mejorar el rendimiento de una <em>blockchain</em> y mantener su seguridad <em>trustless</em> para todos sus usuarios.</p><p>Sin embargo, una <strong><em>Data Availability</em></strong> &quot;confiable&quot; sigue siendo un desafío a superar debido a la naturaleza descentralizada y anónima de muchos protocolos o redes que la usan.</p><p>A medida que los protocolos y la tecnología blockchain en general vaya madurando, es esencial que los datos estén disponibles para que los <em>developers</em> y/o expertos puedan realizar acciones en pro de crear un mejoramiento continuo de la cripto esfera. Además, es importante que se establezcan estándares claros para la calidad y la veracidad de los datos para garantizar que los inversores tengan acceso a información confiable y precisa. <strong>Lo cual podrá contribuir a la adopción masiva de la blockchain que tanto se busca y que quizás ha costado conseguir…</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fc55ac0fc385eb5c2314f9921b077d054f75604ea20c5a48f0150a731b78e0af.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><hr><h1 id="h-referencias" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">📚Referencias</h1><p>1️⃣<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://moralis.io/data-availability-in-blockchains-exploring-the-data-availability-layer/">Data Availability in Blockchains - Exploring the Data Availability Layer</a></p><p>2️⃣<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethereum.org/en/developers/docs/data-availability/#:~:text=Data%20availability%20is%20the%20guarantee,transactions%20get%20processed%20in%20blocks">Data availability | ethereum.org</a></p><p>3️⃣<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.alchemy.com/overviews/data-availability-layer">What is the data availability layer?</a></p><hr><p>🎉 ¡Gracias por leer hasta el final! En L2 en Español estamos avocados en educar, aprender y estudiar juntos, sigue nuestras redes sociales y únete a la conversación en nuestra comunidad de Telegram!</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/l2espaniol">https://t.me/l2espaniol</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Layer2es">https://twitter.com/Layer2es</a></p>]]></content:encoded>
            <author>layer2es@newsletter.paragraph.com (L2 en Español)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/c4ba7d618f8138f3f7ad8a0b7b350279e88e418b8b39c3ddd4d54115b49bb5a0.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Privacidad en L2]]></title>
            <link>https://paragraph.com/@layer2es/privacidad-en-l2</link>
            <guid>NXSDOBpNusNWDpsG9Dop</guid>
            <pubDate>Mon, 10 Apr 2023 22:51:42 GMT</pubDate>
            <description><![CDATA[📌IntroducciónEn estos días existe una falta de coherencia entre la transparencia existente en las Layer 2 —cripto en general— y el deseo de privacidad que exige el ecosistema al final del día. Los datos públicos y verificables on-chain significan que las transacciones son rastreables y no pueden modificarse. Al mismo tiempo, al interactuar en el mundo real y en el mundo digital, inevitablemente dejamos alguna información, lo que también hace que otros puedan rastrearnos, desde movimientos on...]]></description>
            <content:encoded><![CDATA[<h2 id="h-introduccion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">📌Introducción</h2><p>En estos días existe una falta de coherencia entre la transparencia existente en las Layer 2 —cripto en general— y el deseo de privacidad que exige el ecosistema al final del día. Los datos públicos y verificables <strong><em>on-chain</em></strong> significan que las transacciones son rastreables y no pueden <strong>modificarse</strong>. Al mismo tiempo, al interactuar en el mundo real y en el mundo digital, inevitablemente dejamos alguna información, lo que también hace que otros puedan <strong>rastrearnos</strong>, <strong>desde movimientos on-chain hasta relacionar una address con nuestra identidad real.</strong></p><p>La falta de protección efectiva de los datos es inaceptable en el mundo que vivmos, porque no solo los individuos quieren proteger su propia información o la de terceros, cualquier empresa u organización también quiere mantener la confidencialidad de sus datos sensibles y valiosos. Por lo tanto, resolver el problema de la privacidad es clave para que, en el caso específico de las Layer 2, logren dar un paso hacia la adopción masiva. <strong>Motivados por esto, muchos actores han identificado el problema y han dado forma a las primeras soluciones de privacidad como parte de las soluciones de escalabilidad de Ethereum.</strong></p><p>A continuación, presentaremos las soluciones existentes en materia de privacidad dentro del ecosistema Layer 2 y relacionados.</p><hr><h2 id="h-proyectos-principales-que-ofrecen-privacidad-en-l2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">✨Proyectos principales que ofrecen privacidad en L2.</h2><h2 id="h-aztec-network" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🔷Aztec Network</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e6c57d19f8c9b7e990720980090ba9de3e4820817cbddf12c3077be4d33ef0f2.png" alt="Aztec Network es un de las mejores opciones para obtener privacidad en L2." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Aztec Network es un de las mejores opciones para obtener privacidad en L2.</figcaption></figure><p>Aztec es una <em>Layer</em> 2 de privacidad de Ethereum construida con un <em>ZK Rollup</em> que permite transacciones anónimas entre cuentas.</p><p>Aztec <strong>crea de una manera fácil <em>zero-knowledge proofs</em>, mediante <em>PLONK</em></strong>, y luego <strong>usa el modelo Bitcoin <em>UTXO</em></strong> para permitir transacciones de privacidad.</p><p>Dado que el modelo <em>UTXO</em> no permite que Aztec use <em>smart contracts</em> complejos, el equipo a desarrollado una solución llamada Aztec Connect, una forma de implementación de contratos en la <em>mainnet</em> de Ethereum que permite a los usuarios hacer uso de DeFi, algo que equivale al &quot;<em>mapping</em>&quot;.</p><p><strong>Nota: El término <em>mapping</em> en <em>Solidity</em> actúa como una tabla <em>hash</em> o diccionario en cualquier otro lenguaje. Estos se utilizan para almacenar los datos en forma de pares clave-valor. Los <em>mappings</em> se utilizan principalmente para asociar la dirección única de Ethereum con el tipo de valor asociado.</strong></p><h3 id="h-plonk-el-sistema-zero-knowledge-proof-de-aztec" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🧾PLONK, el sistema zero-knowledge proof de Aztec</h3><p><strong>El papel de <em>PLONK</em> es generar <em>zero-knowledge proofs</em></strong>, lo que podríamos referir por ejemplo a &quot;sacar una licencia de conducir&quot;. En otras palabras, <em>PLONK</em> <strong>es un tipo de tecnología <em>zero-knowledge</em></strong>.</p><p>Con <em>PLONK</em>, cuando los comerciantes transfieren dinero de un lado a otro, los nodos y otras personas solo pueden obtener una <strong>&quot;una licencia de conducir&quot;</strong> y saber que la información en la <strong>&quot;licencia&quot; es definitivamente cierta</strong>, pero no sabrán exactamente que <strong>información tienen la licencia.</strong></p><h3 id="h-por-que-necesitamos-plonk" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🤔¿Por qué necesitamos PLONK?</h3><p>Aunque la tecnología de las <em>zero-knowledge proofs</em> es relativamente madura, Ethereum no se consideró compatible con la <em>zero-knowledge proof</em> cuando se creó.</p><p>Como resultado, <strong>lleva mucho tiempo generar una <em>zero-knowledge proof</em> directamente en Ethereum</strong>, por lo que los desarrolladores tienen que elegir otras opciones, y <strong><em>PLONK</em> es una de esas &quot;opciones&quot;.</strong></p><p><em>PLONK</em> en realidad proporciona un <strong><em>&quot;Template&quot;</em></strong> unificado para crear <em>zero-knowledge proof</em> para que los nodos de Aztec mejoren la eficiencia de la red.</p><p>Además, <strong>Aztec ha modularizado <em>PLONK</em></strong>. Si un nodo no quiere usar <em>PLONK</em> y quiere usar otras formas de <em>zero-knowledge proofs</em>, como FRI, también es posible.</p><h3 id="h-utxo-una-forma-de-comerciar-amigable-a-zero-knowledge-proofs" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">💰UTXO: una forma de comerciar amigable a zero-knowledge proofs</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/92dab63924b0de4ebf4ce74f73e5f44fd8d251c8e18ced21d972952047d65ebe.png" alt="Funcionamiento de las Transacciones UTXO." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Funcionamiento de las Transacciones UTXO.</figcaption></figure><p>Después de usar <em>PLONK</em> para generar <em>zero-knowledge proofs</em>, ¿cómo se pasan las &quot;<em>proofs</em>&quot; entre nodos y cuentas? <strong>Pues usando <em>UTXO</em></strong>.</p><p><em>UTXO</em> es un método de transferencia de bitcoin que <strong>se diferencia de los sistemas de cuentas como Ethereum ya que en un sistema de cuentas como Ethereum los usuarios tienen <em>wallets</em>.</strong> Es como, si vas a pagar, sacas el dinero de tu bolsillo y lo das.</p><p>En el caso de <em>UTXO</em>, <strong>no todos los usuarios tienen wallets</strong>. En su lugar, se registra el dinero y el historial de transferencias de este dinero. <strong>Y el último destinatario del dinero, es el dueño del mismo.</strong></p><p>Entonces, en el sistema de <em>wallets</em> de Ethereum es <strong>&quot;nosotros poseemos el dinero&quot;</strong> y en el caso de <em>UTXO</em> es <strong>&quot;mi nombre está en el dinero&quot;.</strong></p><p>Ahora bien, lo que hace Aztec es tomar el nombre del comerciante y borrarlo del dinero.</p><p><strong>Para evitar que los comerciantes se confabulen entre sí</strong>, se genera una <em>zero-knowledge proof</em> antes de la transacción, lo que demuestra su transacción original, y la nueva <em>proof</em> se publica bajo el nuevo dinero.</p><p><strong>Los resultados de la transferencia se registran en dos libros separados</strong> (Merkle Trees), uno para el <strong><em>Note Tree</em></strong> y el otro para el <strong><em>Nullifier Tree.</em></strong></p><p>Si esta &quot;proof&quot; existe en el <strong><em>Note Tree</em></strong>, pero no en el <strong><em>Nullifier Tree</em></strong>. Esto significa que el saldo es válido.</p><h3 id="h-aztec-connect-utxo-aplicado-a-defi" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">💳Aztec Connect: UTXO aplicado a DeFi</h3><p>Lamentablemente <strong><em>UTXO</em> no funciona para implementaciones complejas de smart contracts</strong>, y <strong>Aztec Connect está diseñado para resolver este problema.</strong></p><p>Aztec implementó el <em>smart contract</em> <em>“Aztec Bridge Contract”</em> en la <em>mainnet</em> de Ethereum. Cuando un usuario usa el protocolo DeFi en Aztec, el contrato agrega fondos e interactúa con el protocolo DeFi en <em>mainnet</em>, y luego devuelve los fondos al usuario una vez que se completa la transacción.</p><p>Las dApps que quieran implementarse en Aztec, debe conectarse al Connect SDK. Algunos de los proyecto que lo hicieron usando zk.money son:</p><ul><li><p><strong>Yearn Finance :</strong> Para <em>yield farming</em> usando las <em>vaults</em> de Yearn Finance.</p></li><li><p><strong>Euler:</strong> para hacer <em>lending</em> usando ETH y generar ganancias por hacer <em>yield</em> con weWETH</p></li><li><p><strong>AAVE:</strong> para hacer <em>lending</em> usando ETH ó DAI y generar ganancias por hacer <em>yield</em> con wa2WETH ó wa2DAI respectivamente.</p></li><li><p><strong>Compound:</strong> para hacer <em>lending</em> usando DAI y generar ganancias por hacer <em>yield</em> con wcDAI.</p></li><li><p><strong>Liquity:</strong> Servicio de <em>borrowing</em> con LUSD utilizando ETH como colateral.</p></li><li><p><strong>Lido:</strong> Para hacer <em>swap</em> de ETH por stETH y realizar <em>staking</em> con stETH en Curve para obtener recompensas diarias.</p></li></ul><p>Recientemente el equipo de Aztec <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://medium.com/aztec-protocol/sunsetting-aztec-connect-a786edce5cae"><strong>anuncio su desvinculación</strong></a> Aztec Connect, los depositos de <em>front-ends</em> como zk.money y zk.finance <strong>serán deshabilitados</strong>, y se dará la oportunidad a los usuarios de retirar los fondos hasta el <strong>21 de marzo del 2024.</strong> El objetivo de esto sera reducir el trabajo de secuenciador progresivamente, renunciar a los permisos del contrato y cesar el funcionamiento del <em>rollup</em>.</p><p>El codigo de Aztec ha sido <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/AztecProtocol/aztec-connect">abierto al público</a> con las actualizaciones de scaling debidas y un nuevo SDK seguro. Con esto, el equipo de Aztec <strong>invita a los developers a crear, mejorar y implementar sus propios forks de Aztec Connect</strong>, a fin de lograr obtener una nueva versión de <strong>Aztec Connect 100% dirigida por la comunidad</strong>, en donde se comprometen a <strong>financiar</strong> las soluciones más prometedoras.</p><hr><h2 id="h-obscuro" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🌚Obscuro</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ffba8548f641dd5f689a373c52e416b9fbf0b35cca1a8604ef01061bbb4e442d.png" alt="Obscuro utiliza a su favor la ventajas de los Optimistic y ZK rollups." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Obscuro utiliza a su favor la ventajas de los Optimistic y ZK rollups.</figcaption></figure><p>Obscuro es una solución de Ethereum L2 de uso general <strong>que prioriza la privacidad que se encuentra entre los <em>Optimistic</em> y ZK Rollups</strong> para beneficiarse de lo mejor de ambos mundos.</p><p>Obscuro<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://obscu.ro/faq"> afirma</a> que <strong>es capaz de tener el performance y uso general de los <em>Optimistic Rollups</em> combinado con la velocidad de retiro de los <em>ZK Rollups</em>.</strong></p><p>A diferencia de las soluciones basadas en <em>zero-knowledge proofs</em>, la privacidad de Obscuro <strong>se basa en el uso de <em>TEE</em></strong>, que <strong>es un enclave seguro</strong> que se encuentra en los procesadores de <strong>Intel (SGX)</strong>, donde puede ejecutar cálculos totalmente confidenciales. Básicamente, cuando un nodo recibe una data encriptada, <strong>el procesador la desencripta, la valida y la vuelve a encriptar</strong>, sin que los validadores, los nodos completos y hasta el mismo operador del nodo puedan ver la información</p><p>El uso de los <em>TEE</em> no es exclusivo de Obscuro también lo usan Secret Network en Cosmos y Phala en Polkadot. Actualmente se encuentra en desarrollo.</p><hr><h2 id="h-otras-soluciones-de-privacidad-en-l2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🔥Otras soluciones de privacidad en L2.</h2><h2 id="h-zkopru" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🙊Zkopru</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9ecf50d1eda7a47ec7eb4364ef4b1338d34e3f60d71ab0e6de268e2d2c68bad1.png" alt="Zkopru combina la tecnología zk-SNARK con un Optimistic Rollup." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Zkopru combina la tecnología zk-SNARK con un Optimistic Rollup.</figcaption></figure><p>Zkopru <strong>es una <em>Layer</em> 2 basado en <em>UTXO</em> para transacciones privadas que utiliza <em>zk-SNARK</em> y un <em>Optimistic Rollup</em></strong>. Es capaz de admitir transferencias privadas y <em>atomic swaps</em> privados dentro de su L2, es compatible con ETH, ERC20, ERC721 con un bajo costo. Además, <strong>con la función de <em>pay-in-advance</em>, los usuarios pueden retirar activos de la L2 antes de la finalización.</strong> Zkopru significa zk (de <em>zero-knowledge proof</em>) opru (de <em>Optimistic Rollup</em>).</p><p>Es importante destacar que los <em>ZK rollups</em>, utilizan <em>zero-knowledge proofs</em> para verificar el cálculo correcto del siguiente estado cuando se aplican nuevas transacciones, pero <strong>Zkopru no es un <em>ZK Rollup</em></strong>. Mientras que los <em>ZK Rollups</em> <strong>usan la parte &quot;zk&quot; para crear una <em>validity proof</em></strong> para la transición del estado del <em>rollup</em>, <strong>Zkopru usa la parte “zk” para hacer que las transferencias individuales sean privadas.</strong></p><p>Este concepto tiene importantes ventajas en términos de consumo de gas. Para las transacciones zk directamente en <em>mainnet</em>, sería necesario utilizar una función <em>hash</em> compatible con <em>SNARK</em> para construir un <em>Merkle tree</em>, <strong>lo que es muy costoso</strong>. Pero usando un <em>Optimistic Rollup</em>, se puede actualizar el <em>Merkle tree</em> compatible con <em>SNARK</em> a un bajo costo <em>off-chain</em>. Como resultado, este protocolo <strong>consume alrededor de 8800 gas</strong> por transferencia privada (una transferencia ETH normal en Ethereum <strong>cuesta 21000 gas</strong>)</p><p>El procesos de zkopru son sencillos, para depositar solo es necesario usar la interfaz principal para enviar los fondos desde la L1. Luego para transferencias, <strong>cada usuario necesita generar su propia dirección Zkopru</strong> a partir de la llave privada que su ethereum <em>wallet</em> (la cual será utilizada para enviar o recibir fondos al igual que en la L1). Para garantizar la seguridad de la plataforma, <strong>cada vez que se completa una transferencia se genera una <em>zero-knowledge proof</em> que es enviada al Zkopru <em>coordinator</em></strong>. Después de que el Zkopru <em>coordinator</em> haya sido incluido en la transacción (mediante <em>fees</em>), los fondos se consideran privados.</p><p>Para el caso del retiro de fondos de la <em>chain</em>, al igual que el cualquier <em>Optimistic Rollup</em>, <strong>se deben esperar 7 días</strong>. En donde los detalles de la transacción deberán revelarse para ello, por lo que la dirección y el monto retirado <strong>ya no son privados</strong>.</p><p>❗‼🧨Actualmente Zkopru <strong>ha dejado de tener actividad en cuanto a desarrollo</strong>, la prueba de ello es que <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/ZkopruNetwork/status/1483834824368570373">su último post en twitter</a> es de 19 de enero del 2022, <strong>es decir más de un año sin novedades.</strong></p><h2 id="h-tornado-cash" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🌪Tornado Cash</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8c07a769845071e56c5a1feea6ee252371334d52f6debbc7f82bd4e2ce5b302f.png" alt="Tornado Cash otorga su servicio a las L2 a traves de Arbitrum y Optimism." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Tornado Cash otorga su servicio a las L2 a traves de Arbitrum y Optimism.</figcaption></figure><p>Tornado Cash es un <em>mixer</em> <em>open-source</em> que otorga privacidad a sus usuarios permitiendo ocultar el origen o destino de sus criptomonedas y tokens en la red Ethereum. Sin embargo, a pesar de ser originalmente creado para Ethereum, también <strong>se a extendido a las Layer 2 Arbitrum y Optimism</strong> (aunque <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://defillama.com/protocol/tornado-cash">no con tanta repercusión</a> como en la L1).</p><p>El código fue diseñado para unir los activos de los usuarios dentro de una misma <em>pool</em>, usando <em>zero-knowledge proofs,</em> por lo tanto es difícil para un observador externo rastrear la procedencia de los fondos.</p><p>El rendimiento y las capacidades de Tornado Cash son indudables, y por tal motivo ha sido la herramienta favorita de los <em>hackers</em> para <strong>&quot;borrar evidencia”</strong> de sus ataques. Debido a esto, el protocolo ha estado bajo la lupa de los reguladores, a través de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://rekt.news/es/eye-of-the-storm/">sanciones de la OFAC</a> e incluso <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.coindesk.com/policy/2022/08/24/alleged-tornado-developer-pertsev-must-stay-in-jail-dutch-judge-rules/">el arresto de su uno de sus co-fundadores</a> (sin importar que desde 2020 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/bantg/status/1558853418999074823?ref_src=twsrc%5Etfw">el <em>team</em> había renunciado a la propiedad del <em>multisign</em></a>, dejado a la DAO como <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.safe.global/transactions/history?safe=eth:0xb04E030140b30C27bcdfaafFFA98C57d80eDa7B4">único gestor</a> de los fondos).</p><p>A pesar de todas estas polémicas, Tornado Cash <strong>sigue siendo una de las opciones para obtener privacidad en L2</strong>, y al ser <em>open-source</em>, da la posibilidad a los <em>developers</em> de crear variaciones del protocolo con sus propias reglas, tal como <strong>Privacy Pools</strong>.</p><hr><h1 id="h-soluciones-futuras" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🔮Soluciones futuras</h1><h2 id="h-privacy-pools" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🤫Privacy Pools</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/19f416baaf41f56b0d4ccdf92aeb2126615f1e4cf82a07854f1a8e74eb462f9a.png" alt="Privacy Pools anunció la integración con Optimism." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Privacy Pools anunció la integración con Optimism.</figcaption></figure><p>Privacy Pools es un protocolo que es capaz de proporcionar privacidad a las transacciones de Ethereum, originalmente fue pensado para operar en la L1, sin embargo recientemente, el co-fundador de Privacy Pools, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/ameensol">@ameensol</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/ameensol/status/1632083054272430080">anunció la integración con Optimism</a>, <strong>por lo tanto los usuarios de la L2 de Optimism podrán disfrutar de las funcionalidades de Privacy Pools.</strong></p><p>Privacy Pools <strong>puede ser considerado un <em>fork</em> de Tornado Cash</strong>, en esencia es igual, es un <em>mixer</em> de criptomonedas con la diferencia que utiliza <em>zero knowledge proofs</em> a través de la cual los usuarios <strong>pueden probar que sus retiros no son parte de las transacciones ilícitas</strong>. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/ameensol">@ameensol</a> publicó <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/ameensol/status/1632089405220442116">un tutorial</a> de como utilizar la solución.</p><p>Es importante mencionar que actualmente de acuerdo a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ameensol/privacy-pools">su documentación</a>, <strong>el código de Privacy Pools aún se encuentra en fase alpha</strong>, aún no ha sido auditado, todavía no ha tenido su <em>trusted setup</em> y se han encontrado <em>bugs</em> en lo que se está trabajando.</p><p><em>Esta solución aún tiene mucho camino por recorrer y mejorar, solo el tiempo dirá si trasciende o se la lleva un “tornado”.</em></p><h2 id="h-starknet-l3s" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">⭐Starknet L3s</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7ea8006d676fa78d5e2608a83c008e01d6ef9d435c21c08a335679e06eb2501d.png" alt="Startnet buscará mediante L3 implementar la base para obtener privacidad." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Startnet buscará mediante L3 implementar la base para obtener privacidad.</figcaption></figure><p>Como se sabe, Starknet <strong>utiliza una L2 pública para mostrar y validar sus transacciones que luego son verificadas en la L1.</strong> Sin embargo debido a la reciente demanda de escalabilidad, interoperabilidad y privacidad, Starknet <strong>tiene planeado la creación de varias subredes</strong> (<strong>L3</strong>), con el fin de mejorar el rendimiento, reducir los fees exponencialmente e implementar privacidad. De acuerdo a lo expuesto en este <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/StarkWareLtd/status/1484155806094405635">tuit</a>, con <strong>la creación de un fractal destinado a la privacidad</strong>, Starknet será capaz de probar un <em>statement</em> y entregar una <em>proof</em> hacia una <em>Laye</em>r debajo de ella, sin revelar ningún detalle.</p><p>De esta forma la L3 puede incluir áreas privadas para computar datos que nunca llegarán a L2 pública. <strong>¡Lo que se dice en L3 se queda en L3!</strong></p><p>Esta tecnología <strong>sigue en desarrollo</strong> pero será la base para que futuras soluciones de privacidad en Starknet salgan a la luz.</p><h2 id="h-sin7y-ola" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🌊Sin7Y - Ola</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/557cba2d088ef1fa7cb35d4bd52e516d75272fd98ae4ed9c20ec1cb9d7c69d97.png" alt="Sin7y implementará privacidad a través de su producto Ola." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Sin7y implementará privacidad a través de su producto Ola.</figcaption></figure><p>Fue fundada en 2021 e impulsada por <em>blockchain developers</em> de primer nivel, Sin7Y es una incubadora de proyectos y un equipo de investigación de tecnología de <em>blockchain</em> que explora las tecnologías más importantes y de vanguardia, incluidas <em>EVM, Layer2, Crosschain</em>, <em>Privacy Computing</em>, etc. Actualmente están construyendo <strong>Ola</strong>, una plataforma integral que refuerza el ecosistema Ethereum con <strong>privacidad programable</strong>, escalabilidad programable y facil de usar por <em>developers</em>.</p><p>El equipo de Ola <strong>se planteó el reto de crear una <em>programmable privacy</em></strong>. Para conseguir esto <strong>el equipo de Ola debe abordar 2 elementos clave</strong>: La parte &quot;<strong>Programable</strong>&quot; lo cual se refiere a usar una <strong><em>ZKVM</em></strong> (<em>zero-knowledge virtual machine</em>) para generar <em>proofs</em> válidas para cualquier uso. Y la parte de &quot;<strong>privacidad</strong>&quot; esto significa que <strong>se necesita un sistema de encriptación complejo y un nuevo tipo de dato para lograrlo</strong>.</p><p>Actualmente <strong>el equipo de desarrollo de Ola se encuentra explorando opciones de que tipo de encriptación va a utilizar</strong>, por lo que habrá que esperar a futuros avances para saber cómo pretenden ofrecer privacidad, una buena pista de ello <strong>es el lanzamiento de su testnet destinada para el Q4 del 2023</strong> según el <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://sin7y.org/">roadmap</a> que se muestra en su <em>website</em>.</p><h2 id="h-intmax" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🌀Intmax</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e84ec1fc3b299b1a6b24647f6dbb743b88ac56b6a35f06fb7d8549f64b81540d.png" alt="https://intmax.io/" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://intmax.io/</figcaption></figure><p>Es un <em>zk Rollup </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dankradfeist.de/ethereum/2021/02/14/why-stateless.html#:~:text=Statelessness%20%E2%80%93%20blocks%20come%20with%20full,whether%20a%20block%20is%20valid"><em>stateless</em></a> que poseen <strong>una serie de características únicas</strong> que permiten a los usuarios obtener “<strong><em>customizable privacy</em></strong>” (Privacidad personalizada en español).</p><p>La principal característica de Inxmax reside <strong>no usa datos históricos de transacciones.</strong> Esta eliminación de casi todos los datos <em>on-chain</em> de zkRollup, proporciona una gran ventaja. Por ejemplo, los datos resultantes de las transacciones se comprimen en gran medida, lo que reduce el costo del gas. Además, los datos de los usuarios se separan de los datos compartidos comúnmente, <strong>lo que permite la privacidad por defecto.</strong></p><p>Otra característica importante es que no <strong>utiliza <em>zkp verification</em></strong>, ya que Intmax usa un mecanismo llamado “<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethresear.ch/t/a-pre-consensus-mechanism-to-secure-instant-finality-and-long-interval-in-zkrollup/8749">Pre-consensus</a>” en donde <strong>es posible enviar datos de <em>zkp</em> sin ejecutar verificaciones zkp on-chain</strong>, creando al mismo tiempo un compromiso optimista sin posibilidad de actividades maliciosas. Esto permite acortar de manera segura el período de espera de 7 días que requieren los Optimistic rollups a solo unas pocas horas.</p><p>Actualmente es posible usar la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.testnet.intmax.io/getting-started/overview"><em>testnet</em> de Intmax</a> y se espera que su mainnet sea lanzada en el <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://intmax.io/#roadmap">Q2 de 2023</a>.</p><h2 id="h-ethereum-stealth-addresses" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🐱‍👤Ethereum Stealth Addresses</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/57389f6501d2848341259afda2638f5151887a9cc751dd708090069fc1e74102.png" alt="Vitalik propuso al mundo su idea de como integrar privacidad a la Ethereum mainnet." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Vitalik propuso al mundo su idea de como integrar privacidad a la Ethereum mainnet.</figcaption></figure><p>En Ethereum, las transacciones son públicas de forma predeterminada, lo que puede plantear un problema de privacidad. Hay formas de lograr la privacidad transaccional en la red, <strong>como usar <em>mixers</em> de criptomonedas</strong>. Sin embargo, tales métodos pueden plantear problemas regulatorios. <strong>Esto se vió con Tornado Cash</strong>, que fue sancionado por la Oficina de Control de Activos Extranjeros (OFAC) del Departamento del Tesoro de EE. UU. por actividades potencialmente ilícitas.</p><p>De acuerdo a las palabras de Vitalik:</p><blockquote><p><em>“La privacidad es uno de los mayores desafíos que quedan en el ecosistema Ethereum&quot;.</em></p></blockquote><p>Por ello, el 20 de enero del 2023 Vitalik Buterin, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://vitalik.ca/general/2023/01/20/stealth.html">publicó una propuesta</a> en donde <strong>se presenta la idea de agregar privacidad a Ethereum</strong> mediante la implementación de las <strong><em>Stealth Addresses</em></strong> (en español dirección oculta o secreta).</p><p>El sistema de las <em>Stealth Addresses</em> <strong>se basa en un mecanismo que permitiría que cualquier <em>wallet</em> de Ethereum genere direcciones públicas ofuscadas criptográficamente</strong> llamadas <strong>&quot;<em>Stealth Addresses</em>&quot;</strong> para recibir fondos de manera privada y acceder a ellos <strong>usando un código especial</strong> llamado <strong>&quot;<em>spending key</em>&quot;</strong> (clave de gasto en español).</p><p>Buterin describió que las <em>Stealth Addresses</em> brindan las mismas propiedades de privacidad de alguien que genera una dirección nueva para cada transacción. Estas <em>Stealth Addresses</em> propuestas <strong>son una forma de aumentar la privacidad en Ethereum al crear direcciones únicas y anónimas para cada transacción.</strong></p><p>Cada vez que alguien realiza una transacción, puede generar una nueva <em>Stealth Address</em> para que sea difícil rastrear las transacciones o determinar quién envía y recibe activos.</p><p>Esto significa que <strong>el historial de transacciones de cada usuario puede permanecer privado.</strong> De igual forma, Buterin también sugirió usar <em>zk-SNARK</em> (<em>zero-knowledge proofs</em>), <strong>para aumentar la privacidad del sistema</strong> y dificultar la vinculación de las <em>Stealth Addresses</em>.</p><p>Básicamente esta propuesta es para ser operada en la L1 de Ethereum, <strong>pero una vez que sea lanzada, es muy probable que sea aprovechada para agregar privacidad indirectamente a las L2.</strong></p><hr><h2 id="h-conclusion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Conclusión</h2><p>Es natural que cuando vemos que las transacciones y saldos de nuestra billetera son publicadas en la <em>blockchain</em> nos sintamos observados e intimidados. Muchos usuarios y proyectos han sufrido ataques luego de meses de persecución por parte de <em>exploiters</em>. Por lo que la búsqueda de la privacidad siempre tendrá demanda.</p><p>Si realmente se quiere que la tecnología <em>blockchain</em> iguale o supere a las finanzas del mundo real, es importante que se la privacidad sea un objetivo o al menos una opción a implementar. Algunos proyectos, como los que se mencionaron en este artículo, emplean o emplearán buenas ideas de privacidad para reducir esta brecha entre DeFi y TradFi, <strong>en donde solo el tiempo dirá si lo logran o no.</strong></p><p>En esta industria siempre existirán aquellos que se aprovecharan para lucrarse o dañar, lo cual da argumentos a reguladores de interceder en la misma. Pero aun así, la privacidad siempre sera necesaria.</p><p><strong><em>Si no tienes nada que ocultar, no tienes nada que temer…</em></strong></p><p><strong><em>Pero cuando no hay dónde esconderse, debes tener mucho miedo.</em></strong></p><hr><p>📌<strong>Por último</strong>, no olvides leer nuestro últimos trabajos de investigación hechos por <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Nadai02010">@Nadai02010</a>, Una serie de 3 artículos en donde se explica <strong>el cual es la arquitectura, el futuro y como desarrollar usando zkSync Era</strong>.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/oGUMSs0Szc7RmVbiVlxYoaAphKvLJ0k3iS_Frx8OxKc">https://mirror.xyz/layer2es.eth/oGUMSs0Szc7RmVbiVlxYoaAphKvLJ0k3iS_Frx8OxKc</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/bEVsgKYQu0l4pNUfgX4sUunf8d8stqAK3-r7mUmGMKc">https://mirror.xyz/layer2es.eth/bEVsgKYQu0l4pNUfgX4sUunf8d8stqAK3-r7mUmGMKc</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/f-k_yYoN0lQCebtCjuRsMOkFm6FJORjB9ldOkOgL55w">https://mirror.xyz/layer2es.eth/f-k_yYoN0lQCebtCjuRsMOkFm6FJORjB9ldOkOgL55w</a></p><p><strong>Dale un vistazo! No arrepentirás!</strong></p><hr><p>🎉 ¡Gracias por leer hasta el final! En L2 en Español estamos avocados en educar, aprender y estudiar juntos, sigue nuestras redes sociales y únete a la conversación en nuestra comunidad de Telegram!</p><hr><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/l2espaniol">https://t.me/l2espaniol</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Layer2es">https://twitter.com/Layer2es</a></p>]]></content:encoded>
            <author>layer2es@newsletter.paragraph.com (L2 en Español)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/2d745287bbbe9a8cddba5095bb877f6f777579d4b23cdfa462a533380422e448.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Desarrollando en zkSync Era]]></title>
            <link>https://paragraph.com/@layer2es/desarrollando-en-zksync-era</link>
            <guid>aepCZBPYhHCGBEbOlLOB</guid>
            <pubDate>Fri, 31 Mar 2023 22:54:39 GMT</pubDate>
            <description><![CDATA[Series zkSync Parte 3/3 Hola comunidad 👋 ¡Bienvenidos a la tercera parte de nuestra serie sobre zkSync! En la primera parte, exploramos su arquitectura, en la segunda hablamos sobre su futuro y escalabilidad, y en esta última edición, cubriremos conceptos muy poderosos, como la abstracción de cuentas (AA) y cómo se puede utilizar en zkSync. También presentamos la Dapp de mensajería en L2 en español, donde podrás interactuar y dejar tus mensajes “Sólo ETH para testnet”. Aunque explicaremos có...]]></description>
            <content:encoded><![CDATA[<p><strong><em>Series zkSync Parte 3/3</em></strong></p><p>Hola comunidad 👋</p><p>¡Bienvenidos a la <strong>tercera parte</strong> de nuestra serie sobre zkSync! En la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/oGUMSs0Szc7RmVbiVlxYoaAphKvLJ0k3iS_Frx8OxKc"><strong>primera parte</strong></a>, exploramos su arquitectura, en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/bEVsgKYQu0l4pNUfgX4sUunf8d8stqAK3-r7mUmGMKc"><strong>la segunda</strong></a> hablamos sobre su futuro y escalabilidad, y en esta última edición, cubriremos conceptos muy poderosos, como la <strong>abstracción de cuentas (AA)</strong> y cómo se puede utilizar en zkSync.</p><p>También presentamos <strong>la Dapp de mensajería en L2 en español</strong>, donde podrás interactuar y dejar tus mensajes <strong>“Sólo ETH para testnet”</strong>. Aunque explicaremos cómo se ha desarrollado en los documentos y <strong>cómo se “podría” configurar mediante AA y un Paymaster</strong>. El Paymaster permitiría al usuario pagar con otro token ERC20, y luego el Paymaster se encargaría de pagar la transacción en ETH.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/715e491dcf1e1d41819b47e51140501d7b11d397021d052cbf394758378a1416.png" alt="Agregado token zL2Es como Paymaster" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Agregado token zL2Es como Paymaster</figcaption></figure><p><strong>Esperamos que esta serie de artículos haya sido de gran ayuda e interés para ustedes y haya abordado temas importantes.</strong> Ahora, nos centraremos en aprender sobre el gran concepto de la <strong>abstracción de cuentas (AA)</strong>.</p><h2 id="h-account-abstraction" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">✍️🔒 Account abstraction</h2><p>Las cuentas en zkSync Era pueden iniciar transacciones, como una EOA, pero también pueden tener lógica arbitraria implementada en ellas, como un contrato inteligente, esta característica se denomina <strong>&quot;abstracción de cuenta&quot;</strong></p><p>Repasemos algunas definiciones muy claras para entender AA:</p><blockquote><p><strong>Definición 1</strong>: AA es cuando un contrato inteligente puede pagar sus propias transacciones (Martin Triay, Devcon 6). En otras palabras, <strong>los contratos abstractos (o contratos inteligentes de cuentas) pueden pagar las transacciones</strong>. Tenga en cuenta que <strong>no es lo mismo que cuentas de propiedad externa</strong> o <strong>billeteras inteligentes.</strong></p></blockquote><blockquote><p><strong>Definición 2:</strong> AA es abstracción de validación. En L1 solo hay una forma de validar transacciones (recuperar una dirección de una firma, mirar esa dirección en el estado, determinar si el nonce está bien para la transacción que se envió y si la cuenta tiene saldo suficiente para realizar la transacción) . <strong>Con AA, abstrae el proceso de validación</strong>: utiliza diferentes tipos de firmas, primitivas criptográficas, procesos de ejecución, etc</p></blockquote><p><strong>Nota:</strong> En computación, el término abstracción se usa para generalizar algo. En este caso, estamos generalizando los contratos inteligentes de la existencia de Externally Owned Contracts (EOA) y Contract Accounts (CA), a simplemente contratos inteligentes.</p><p>La implementación de <strong>billeteras de contratos inteligentes</strong> mejoran la experiencia del usuario de almacenamiento que da pie a propiedades interesantes tales como la <strong>recuperación de claves privadas</strong> (por ejemplo, a través de recuperación social, multigrado).</p><p>También cabe destacar entre sus características que:</p><ul><li><p>Tienen la capacidad de pagar tarifas de gas de forma nativa en tokens que no sean ETH.</p></li><li><p>Tienen la capacidad de cambiar tanto sus claves públicas como privadas.</p></li><li><p>La adición de modificaciones no criptográficas permite a los usuarios solicitar características adicionales en las transacciones, como tiempos de vencimiento y confirmaciones fuera de servicio.</p></li><li><p>Diversidad en los sistemas de verificación de firmas de la ECDSA actual, incluidos los algoritmos de firma segura poscuántica (p. ej., Lamport, Winternitz).</p></li></ul><h2 id="h-equipo-de-pruebas-nadai-l2-espanol" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🧑‍💻 Equipo de Pruebas Nadai L2-Español</h2><p>En L2 en Español, hemos explorado diversas opciones de desarrollo en los tutoriales de zkSync. A pesar de los desafíos encontrados, el resultado final fue muy satisfactorio al evidenciar el gran potencial de esta zkEVM.</p><h2 id="h-paymaster" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">💰 Paymaster</h2><p>Uno de los casos de uso más interesantes de zkSync son los <strong>Paymasters “pagadores”</strong>. Imagínese <strong>poder pagar tarifas para los usuarios de su protocolo.</strong> Los paymasters <strong>son cuentas que pueden compensar las transacciones de otras cuentas</strong>. Además, también pueden facilitar <strong>el pago de tarifas en tokens ERC-20</strong>. Aunque ETH es el token de tarifa formal en zkSync, los pagadores pueden brindar la capacidad de <strong>intercambiar tokens ERC-20 a ETH</strong> sobre la marcha.</p><p>Si los usuarios desean interactuar con un paymaster, deben proporcionar la dirección del paymaster distinta de cero en su transacción <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-712">EIP-712</a> , &quot;Un procedimiento para <strong>el hash y la firma de datos</strong> estructurados tipeados en lugar de solo cadenas de bytes.&quot;. Los datos de entrada al paymaster se proporcionan en el campo <code>paymasterInput</code>.</p><p>Para garantizar que los usuarios experimenten con paymasters en testnet y puedan seguir pagando tarifas en tokens ERC-20, el equipo de Matter Labs proporciona el paymaster de <strong>testnet</strong>. Este permite <strong>pagar tarifas en token ERC-20 a una tasa de cambio de 1:1 con ETH</strong> (es decir, una unidad de este token es igual a 1 wei de ETH).</p><p>En nuestra investigación sobre Paymaster, hemos utilizado la validación de Account Abstraction para crear una nueva wallet derivada de nuestra propia wallet, la cual manejará nuestros nuevos tokens. Esta wallet utilizará un token creado por L2 Español y será gestionada mediante un smart contract de Paymaster que hemos creado y definido, para manejar la tasa de cambio del token utilizado en el pago.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c3e0801e3797d5b637e63b13610444a07643b4a2b8993a2c0c9140ff663f1cb9.png" alt="Creación de nueva Wallet mediante AA, también mint &quot;3 Token zL2Es&quot; y un Paymaster" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Creación de nueva Wallet mediante AA, también mint &quot;3 Token zL2Es&quot; y un Paymaster</figcaption></figure><p>Con el uso de Paymaster, se logra una forma segura y eficiente de realizar transacciones en el token elegido sin comprometer la seguridad del usuario. Este servicio se encarga de efectuar el pago correspondiente en el token seleccionado, permitiéndonos controlar y administrar nuestro gasto sin tener que realizar ninguna operación adicional. De esta manera, se evita exponer información sensible y se asegura la correcta ejecución de las transacciones.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/54a4f162677f0bc135ffd646a29ae72360aeb4f240eff8d8914fd2f69ed31942.png" alt="Contrato Paymaster y su balance equivalente en 1:1 del ERC-20 creado &quot;3 zL2Ep Token&quot;" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Contrato Paymaster y su balance equivalente en 1:1 del ERC-20 creado &quot;3 zL2Ep Token&quot;</figcaption></figure><p>Para añadir nuevos tokens, como zL2Es, podemos configurar el Paymaster para que <strong>cree una nueva wallet</strong> que comience <strong>desde la transacción 0 y mintea nuestro nuevo token</strong>. De esta forma, el Paymaster puede controlar con qué token se paga y realizar el cambio necesario para pagar la tarifa en ETH. Como usuarios, <strong>solo necesitamos escoger el token y pagar la tarifa en el token escogido</strong>. Si es ETH, podemos realizar la transacción directamente, de lo contrario, solo tendremos que firmar la transacción y el Paymaster se encargará del resto.</p><p>El Paymaster puede ser limitado si se detecta que el usuario está intentando realizar una operación malintencionada o que no cumple con los requisitos previos necesarios para la transacción.</p><p>Por lo tanto, es importante verificar que el usuario ha cumplido con todos los requisitos previos antes de realizar cualquier lógica en el Paymaster. En el contexto del tutorial, esto significa verificar que el usuario ha proporcionado suficiente asignación de token antes de realizar la transferencia.</p><p>El método <code>getOverrides</code> devuelve un objeto vacío cuando los usuarios deciden pagar con ether, pero cuando <strong>los usuarios seleccionan la opción ERC20</strong>, debe <strong>devolver la dirección del paymaster y toda la información requerida por ella</strong>. Esto ha sido una parte muy importante para último tutorial.</p><p>En resumen, <strong>la validación de AA</strong> nos permite controlar el sistema de pago de una manera segura y eficiente sin tener que preocuparnos por la gestión de tokens y transacciones complejas, <strong>podríamos haber personalizado un límite de gasto diario o configurar una multisig gracias al soporte de abstracción de cuenta o en zkSync</strong>.</p><ul><li><p>Wallet de Prueba: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goerli.etherscan.io/address/0x789D5ce54F8F96369ee01751C5CA8C9fDAB14650">0x789D5ce54F8F96369ee01751C5CA8C9fDAB14650</a></p></li><li><p>Token L2 Español: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goerli.explorer.zksync.io/address/0x6a8D8FF10580cEF67c419caf6B7179cfbB536C2d">0x6a8D8FF10580cEF67c419caf6B7179cfbB536C2d</a></p></li><li><p>Cuenta creada con AA para gestionar Paymaster: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goerli.explorer.zksync.io/address/0x3bf5bF4071308A20b35c5B7d64e49cB51bF04EA4">0x3bf5bF4071308A20b35c5B7d64e49cB51bF04EA4</a></p></li><li><p>Smart Paymaster con L2 token personalizado: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goerli.explorer.zksync.io/address/0x5De6f84AC1C693426CCBE47FAc92C96b78Ef159e">0x5De6f84AC1C693426CCBE47FAc92C96b78Ef159e</a></p></li></ul><h2 id="h-dapp-mensajes" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">👥💭 Dapp Mensajes</h2><p>En esta guía, le presentamos nuestra Dapp <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://l2espanol-mensajeria-nadai-zksync-era.vercel.app/"><strong>&quot;Mensajería L2 en Español&quot;</strong></a> diseñada para <strong>mejorar su experiencia de interacción</strong>. Aunque ether es el único token con el que puede pagar tarifas, la función de extracción de cuenta le permite integrar pagadores, hemos incorporado una parte activa pero solo el propietario de Paymaster puede configurarlo, podrá ver cómo <strong>se cargan sus saldos en ERC-20</strong> desde Paymaster y cómo <strong>puede dejar su</strong> <code>Saludo con ETH testnet</code>.</p><p>Además, <strong>hemos creado</strong> un <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goerli.explorer.zksync.io/address/0x71b894709DDab5d4D23da43E9e4E3403a09E201A#contract">contrato inteligente</a> que <strong>almacena mensajes de saludos</strong> y <strong>una </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://l2espanol-mensajeria-nadai-zksync-era.vercel.app/"><strong>Dapp</strong></a><strong> para recuperar y actualizar esos mensajes</strong>. Tenga en cuenta que aunque la opción de firma estará disponible y los saldos sean correctos de los ERC-20 configurados para el Paymaster, puede experimentar errores al intentar firmar con los ERC-20, así que sólo dejamos configurado ETH para la actualización de su mensaje.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/cb3af72e6f0df0017b123b5979cf9c7655f9b1ada89d37ebd5be199c9669da16.png" alt="Smart contract de Mensajería con el último mensaje guardado en la Blockchain" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Smart contract de Mensajería con el último mensaje guardado en la Blockchain</figcaption></figure><p>Para comenzar, deberá seguir los mismos pasos que en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/oGUMSs0Szc7RmVbiVlxYoaAphKvLJ0k3iS_Frx8OxKc">la parte 1</a> para agregar la red y tener fondos. Una vez que haya hecho esto, podrá conectar su wallet de testnet a nuestra dapp.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/88a4d57daeabfb73de8afa55c43afd7e6c1155d35913570147a59361d418f5d4.png" alt="Conectar su wallet a la dapp" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Conectar su wallet a la dapp</figcaption></figure><p>Para pagar las tarifas, deberá seleccionar el token que desee utilizar, aunque si selecciona un token configurado <strong>que no sea &quot;ETH&quot;</strong>, podrá <strong>ver su saldo e intentar pagar</strong>, pero <strong>el Paymaster dará un error</strong>. Por lo tanto, podrá <strong>testear</strong> su poder pero deberá elegir &quot;ETH&quot; para escribir su mensaje y pagar la transacción. Una vez hecho esto, podrá dejar su mensaje escrito en nuestra Dapp e interactuar de una forma más cómoda, incluso agregando emojis si lo desea.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/cf9a7528f953b687971dfd57710d537fb81fecbd42c2b49f6dfafc533cfa5b4b.png" alt="Refrescar para reajustar la tarifa " blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Refrescar para reajustar la tarifa</figcaption></figure><p>Es importante tener en cuenta que el botón <code>Refresh</code> debe usarse para <strong>recalcular la tarifa</strong>, ya que esta puede depender de <strong>la longitud del mensaje</strong> que queremos almacenar como saludo.</p><p>Esperamos que a través de la Dapp <strong>&quot;Mensajería L2 en Español&quot;</strong>, pueda tener una mejor perspectiva <strong>visual del poder de la configuración de Paymaster</strong> en testnet y cómo <strong>podría pagar con otros tokens ERC20</strong> mediante la <strong>abstracción de cuenta</strong>, permitiendo realizar las transacciones utilizando <strong>solo una validación de firma</strong>.</p><h3 id="h-agradecimientos" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🫂 Agradecimientos</h3><p>¡Y así concluimos la serie de zkSync! En esta <strong>última parte</strong>, profundizamos en cómo <strong>desarrollar y aprovechar el poder de zkEVM</strong>. Recordemos que en la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/oGUMSs0Szc7RmVbiVlxYoaAphKvLJ0k3iS_Frx8OxKc">primera parte</a> de la serie, analizamos <strong>la arquitectura</strong> de esta solución y en la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/bEVsgKYQu0l4pNUfgX4sUunf8d8stqAK3-r7mUmGMKc">segunda edición</a>, exploramos <strong>el futuro de la escalabilidad</strong> con zkSync Era. Esperamos que esta serie les haya sido útil y les invitamos a estar atento/as a futuras actualizaciones.</p><p>Terminamos <strong>la</strong> <strong>tercera</strong> parte y final de la serie de zkSync, en esta parte analizamos <strong>como desarrollar y el poder que tenemos en su zkEVM</strong>. En la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/oGUMSs0Szc7RmVbiVlxYoaAphKvLJ0k3iS_Frx8OxKc">primera parte</a> fue <strong>la arquitectura</strong> de esta solución y en la segunda edición, hablamos sobre <strong>el futuro de la escalabilidad con zkSync Era</strong>.</p><p>También pueden consultar nuestra <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/39d63a8af9ca4524a7237b1f2456e745"><strong>Biblioteca de Layer 2 en Español</strong></a> para tener una información más detallada o ir directamente en este caso a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/zkSync-Era-5948dd56f580431a8de584a7ad428ba4"><strong>zkSync Era</strong></a><strong>.</strong></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Layer2es/status/1638575210772287490?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1638575210772287490%7Ctwgr%5Edd5dc06b99d744b494c911eb28b982bb73632698%7Ctwcon%5Es1_&amp;ref_url=https%3A%2F%2Fmirror.xyz%2Flayer2es.eth%2FbEVsgKYQu0l4pNUfgX4sUunf8d8stqAK3-r7mUmGMKc">https://twitter.com/Layer2es/status/1638575210772287490?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1638575210772287490%7Ctwgr%5Edd5dc06b99d744b494c911eb28b982bb73632698%7Ctwcon%5Es1_&amp;ref_url=https%3A%2F%2Fmirror.xyz%2Flayer2es.eth%2FbEVsgKYQu0l4pNUfgX4sUunf8d8stqAK3-r7mUmGMKc</a></p><p>🎉 ¡Gracias por leer hasta el final! Si está interesado en continuar aprendiendo y colaborando con nosotros, le invitamos a unirse a la vibrante comunidad de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/l2espaniol">Telegram L2 en Español</a> y a seguirnos en nuestro Twitter L2 en Español. Allí encontrará una gran cantidad de información sobre Layer 2 y el ecosistema de Blockchain en general. ¡Te Esperamos!</p>]]></content:encoded>
            <author>layer2es@newsletter.paragraph.com (L2 en Español)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/e52149155cd9ad05c0e5accbcec96c7a0ab2c782a2ade257f22bbde7bec7f1c5.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[El futuro de la escalabilidad con zkSync Era]]></title>
            <link>https://paragraph.com/@layer2es/el-futuro-de-la-escalabilidad-con-zksync-era</link>
            <guid>FsTUrkFzdjUUc3mnJEP0</guid>
            <pubDate>Fri, 24 Mar 2023 16:29:18 GMT</pubDate>
            <description><![CDATA[Series zkSync Parte 2/3 Hola comunidad 👋 Desde L2 Español, hemos decidido profundizar en zkSync en una serie de tres partes. En la primera parte, analizamos su arquitectura, mientras que en esta segunda parte, abordaremos otros temas relevantes de zkSync, como la escalabilidad, la seguridad en los puentes y el almacenamiento de datos (DA), entre otros aspectos en zkSync. Aunque muchas de estas nuevas tecnologías se presentarán en zkSync 3.0, es importante discutir su potencial y su impacto e...]]></description>
            <content:encoded><![CDATA[<p><strong><em>Series zkSync Parte 2/3</em></strong></p><p>Hola comunidad 👋</p><p>Desde L2 Español, hemos decidido profundizar en zkSync en una serie de <strong>tres partes</strong>. En la <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/oGUMSs0Szc7RmVbiVlxYoaAphKvLJ0k3iS_Frx8OxKc"><strong>primera parte</strong></a>, analizamos su <strong>arquitectura</strong>, mientras que en esta <strong>segunda parte</strong>, abordaremos otros temas relevantes de zkSync, como la <strong>escalabilidad</strong>, la <strong>seguridad en los puentes</strong> y <strong>el almacenamiento de datos</strong> <strong>(DA),</strong> entre otros aspectos en zkSync. Aunque muchas de estas nuevas tecnologías se presentarán en zkSync 3.0, es importante discutir su potencial y su impacto en la cadena de bloques.</p><p>Esperamos que esta serie de artículos sea de gran ayuda para comprender mejor zkSync y cómo se puede utilizar para mejorar la experiencia de los usuarios y desarrolladores en la cadena de bloques.</p><h2 id="h-hyperscaling" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🚀️ Hyperscaling</h2><p>El trilema de blockchain es un concepto fundamental de esta tecnología que se refiere a los tres objetivos claves que cualquier sistema de este tipo debe satisfacer: <strong>seguridad</strong>, <strong>escalabilidad</strong> y <strong>descentralización</strong>. Según este principio, un sistema blockchain de base no puede lograr los tres objetivos de manera simultánea, ya que cualquier mejora en uno de estos aspectos conlleva un compromiso en los otros dos.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2aadc63f52592313c0a079277fca4fd4792b1857ba79dbca7053d3a35d557fd6.png" alt="Representación del Trilema de una blockchain" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Representación del Trilema de una blockchain</figcaption></figure><p>Los sistemas Blockchain buscan garantizar la equidad mediante el principio fundamental de &quot;<strong>no confíes, verifica</strong>&quot;. No obstante, para preservar la descentralización, es necesario que los nodos verificadores requieran bajos recursos para su ejecución. La interconexión de estas dos ideas ha dado lugar a la definición ampliamente aceptada de escalabilidad:</p><ul><li><p><strong>Escalabilidad =</strong> procesamiento de un mayor número de transacciones sin comprometer la seguridad ni la descentralización.</p></li></ul><p>Existen diversas formas de mejorar la escalabilidad, como aumentar la eficiencia del verificador o introducir suposiciones de confianza probabilísticas (como se hace en los resúmenes optimistas). Si bien la mayoría de estos enfoques ofrecen un impulso de escalabilidad lineal, un método sobresale por encima del resto: <strong>las pruebas sucintas de conocimiento cero (ZKP)</strong>. Estas pruebas incurren siempre en costos de verificación de aproximadamente O(1), independientemente del número de transacciones procesadas. Gracias a esto, el escalado basado en ZKP, es decir, validiums y (bajo ciertas condiciones) ZK Rollups, puede ser considerado hiperescalable:</p><ul><li><p><strong>Hiperescalabilidad =</strong> procesamiento de un número infinito de transacciones sin comprometer la seguridad ni la descentralización.</p></li></ul><p>Los ZKP ofrecen una solución eficaz para construir una cadena de bloques heterogénea altamente escalable, este enfoque se conoce como &quot;<strong>escalado fracta</strong>l&quot;. En este modelo, varias cadenas ZKP diferentes (también llamadas hipercadenas en zkSync) <strong>se ejecutan simultáneamente y sus bloques de prueba se agregan en un solo bloque final que se liquida en la capa principal</strong> <strong>L1</strong>. Cada hipercadena se parece a todo el sistema, lo que significa que puede haber un número infinito de hipercadenas adicionales encima (como <strong>L3, L4</strong>, etc.).</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3bab41036617207867c36fb09a54ce28e0f8d5caf07075b9b68b1e87fbb32373.png" alt="Escalado Fractal haciendo un buen uso de HyperScaling con los ZKP correctos" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Escalado Fractal haciendo un buen uso de HyperScaling con los ZKP correctos</figcaption></figure><p>Aunque la escala fractal es necesaria para lograr una mayor escalabilidad, se requiere un componente adicional para alcanzar una hiperescala.</p><ul><li><p><strong><em>Hiperpuentes</em> =</strong> puentes nativos que permiten transferencias entre dos hipercadenas sin consumir recursos en una tercera.</p></li></ul><p>El escalado fractal siempre puede tener puentes nativos que conectan cadenas a través de capas subyacentes, pero en este caso, la cadena base eventualmente se convertirá en una encrucijada para la mayoría de las transferencias, y se convertirá en el cuello de botella central de la escalabilidad, derrotando la idea misma de la hiperescalabilidad paralela. Como resultado, no será posible garantizar transferencias directas baratas entre usuarios en dos cadenas dadas.</p><p>Para lograr una sobrecarga de costo cero en las cadenas subyacentes, <strong>cada hipercadena debe implementar hiperpuentes nativos que realmente puedan grabar y acuñar tokens reales y no solo su representación virtual</strong> (a diferencia de los puentes convencionales), almacenando compromisos de reclamos de acuñación en el estado <strong>Hyperchain</strong>. Además, deben confiar en las implementaciones de <strong>hiperpuentes</strong> en todas las demás hipercadenas, porque <strong>si un solo hiperpuente se ve comprometido, la cadena maliciosa podría interferir con el suministro de tokens (por lo tanto, todas las hipercadenas deben implementar exactamente los mismos circuitos).</strong></p><p>Se pueden transferir activos de una Hyperchain a otra mediante hiperpuentes con el mismo costo que una transferencia normal. Esto funciona de manera similar a los hipervínculos en las páginas web, que permiten acceder a otras páginas con un solo clic, sin necesidad de navegar a través de múltiples capas.</p><p>Además, los contratos inteligentes pueden aprovechar las hipercadenas para enviar activos y mensajes a cualquier hipercadena con garantía de entrega, siempre y cuando la hipercadena de destino esté activa.</p><h3 id="h-contratos-del-sistema" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">📄️ Contratos del sistema</h3><p>Para mantener los circuitos ZK tan simples como sea posible y permitir extensiones sencillas, una gran parte de la lógica de zkSync se trasladó a los llamados <strong>&quot;contratos del sistema&quot;</strong> . Un conjunto de contratos que tienen privilegios especiales y sirven a propósitos especiales, por ejemplo, el despliegue de los contratos, asegurándose de que el usuario paga sólo una vez por la publicación de los datos de llamada de los contratos, etc.</p><p><strong><em>El código de los contratos del sistema no se hará público hasta que se haya sometido a pruebas exhaustivas.</em></strong></p><h3 id="h-zk-rollups-y-puentes-actuales" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🌀️🌉️ ZK Rollups y puentes actuales</h3><p>Antes de seguir con zkSync y la HyperScaling deberemos profundar sobre los puentes y los mecanismos comunes, puede revisar <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hackmd.io/@kalmanlajko/rkgg9GLG5"><strong>Slush, una propuesta de escalado Fractal</strong></a>.</p><p>El sector de los puentes con algún grado de confianza está saturado de empresas como Hop, Celer, deBridge o Connext. Primero clasificaremos a grandes rasgos los mecanismos de estos proyectos y descubriremos que existe <strong>un trilemma.</strong></p><p>La primera opción de puenteo consistiría en encaminar los fondos desde el rollup de origen hasta el L1 y luego hasta el rollup de destino. Esta opción no es fiable, pero si todo el mundo la utilizara sobrecargaría L1, por lo que siempre será cara. Sin embargo, los costes pueden aliviarse si reúnes fondos con otras personas, si vas al mismo destino. Esto es el enrutamiento compartido, así es como la red Hop hace de puente. Cuando se va desde L3 o a mayor profundidad, los distintos fondos pueden agruparse aún más en L2, sin embargo, esta agrupación sólo puede utilizarse para aplicaciones que tengan una gran base de usuarios tanto en el rollup emisor como en el receptor.</p><p>Otra posibilidad es pasar directamente de una capa a otra (por ejemplo, Connext). Aunque son sustancialmente más rápidos y baratos que pasar por L1, estos sistemas sólo intercambian los fondos de una cadena por los de otra, lo que significa que tiene que haber algún otro mecanismo que compense el movimiento neto de fondos entre las capas. Esto conlleva costes adicionales, pero lo más importante es que este método depende en realidad de otras soluciones (como el enrutamiento agrupado).</p><p>Hay otra forma de pasar directamente de una capa a otra, una autoridad que quema y acuña los tokens puenteados en cada capa (como Wormhole). Esta autoridad normalmente toma la forma de una cadena de bloques más pequeña, y existen riesgos de seguridad al tener que confiar en estas cadenas de bloques pequeñas. Los inconvenientes de estos sistemas son obvios.</p><p>Tenemos un trilema: los sistemas no satisfacen las tres propiedades requeridas:</p><ul><li><p><strong>No requerir de confianza.</strong></p></li><li><p><strong>No tocar L1.</strong></p></li><li><p><strong>Tener transferencias reales, no solo intercambio.</strong></p></li></ul><p>La razón de esto es que si tenemos transferencias reales y no intercambios, entonces los fondos deben quemarse en una capa y acuñarse en otra. Esta acuñación solo puede ocurrir si la quema ya ha ocurrido. La confirmación de que se produjo la quema requiere confianza en alguna autoridad o un mensaje transmitido desde L1, ya que las dos capas solo están conectadas a través de L1 sin confianza. Esto hace que sea difícil satisfacer simultáneamente los tres requisitos de un sistema de puente de confianza, aquí entra en juego la propuesta de escalado fractal y zkSync con las Hyperchain.</p><h3 id="h-hyperchain" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🔗️ Hyperchain</h3><p>Las hipercadenas son instancias similares a fractales de zkEVM que se ejecutan en paralelo y con el acuerdo común en la red principal de L1.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c1a9e3e9fe1394508fe239b6fd1456edaf6cf556e74a57e7c082ef3693cfa99d.png" alt="Interoperabilidad entre Hyperchains" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Interoperabilidad entre Hyperchains</figcaption></figure><p>Cualquier persona puede desarrollar e implementar hipercadenas sin permiso. Sin embargo, <strong>para seguir siendo confiable y totalmente interoperable, cada Hyperchain debe funcionar exactamente con el mismo motor zkEVM que la instancia principal de zkSync L2.</strong> Todos los circuitos <strong>ZKP</strong> seguirán siendo <strong>100 % idénticos</strong>, lo que permitirá que las hipercadenas hereden por completo su seguridad de L1, sin importar quién los implemente. Esto garantiza cero suposiciones de confianza/seguridad adicionales.</p><h3 id="h-las-hipercadenas-se-implementaran-siguiendo-el-enfoque-modular" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🔧 Las hipercadenas se implementarán siguiendo el enfoque modular</h3><p>Proporcionarán un marco <strong>SDK</strong> de hipercadenas similar a los de <strong>Cosmos</strong> o <strong>Substrate</strong>, donde los desarrolladores pueden elegir individualmente diferentes componentes de sus cadenas de bloques o implementar los suyos propios <strong>(excepto el núcleo zkEVM)</strong>.</p><p>La <strong>Basechain</strong> es la <strong>principal</strong> instancia de <strong>Hyperchain de zkSync Era</strong> (la instancia L2). Sirve como capa de cálculo predeterminada para contratos inteligentes genéricos y como capa de liquidación para todas las demás hipercadenas (L3 y superiores).</p><p>Basechain no es especial de ninguna manera en particular, excepto que asienta sus bloques directamente en L1.</p><h3 id="h-interoperabilidad-l1l2" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🔌️ Interoperabilidad L1/L2</h3><p>Si bien la mayor parte de la ejecución ocurrirá en L2, algunos casos de uso requieren interoperabilidad con la cadena L1. Los principales casos de uso son la construcción de puentes complejos, el mantenimiento de contratos inteligentes de gobernanza en una cadena que rigen los contratos en otras cadenas, etc.</p><p>Además, la resistencia a la censura L2 se deriva de la cadena subyacente, por lo que la capacidad de enviar mensajes desde Ethereum a zkSync es una parte importante del mecanismo de resistencia a la censura llamado cola de prioridad .</p><p>El envío de transacciones de Ethereum a zkSync se realiza a través del contrato inteligente de zkSync, permite al remitente solicitar transacciones directamente desde L1. Permitiendo así el paso sin permiso de cualquier dato de Ethereum a zkSync.</p><ul><li><p><strong>Cola de prioridad:</strong> el objetivo de la cola de prioridad es proporcionar una forma resistente a la censura de interactuar con zkSync en caso de que el operador se vuelva malicioso o no esté disponible.</p></li><li><p><strong>Proceso de despliegue:</strong> el proceso de la lógica de cuenta es muy similar al de despliegue de un contrato inteligente. Para proteger los contratos inteligentes que no quieren ser tratados como una cuenta, se debe utilizar un método diferente del contrato del sistema de despliegue para hacerlo. En lugar de utilizar <code>create/create2</code><strong>,</strong> se deben utilizar los métodos <code>createAccount/create2Account</code> del contrato del sistema deployer.</p></li></ul><p>Para proteger el sistema de posibles ataques de denegación de servicio (DoS), es necesario establecer ciertas limitaciones en el proceso de verificación. Estas limitaciones incluyen que la lógica de la cuenta solo pueda acceder a las ranuras que pertenecen a esa cuenta, lo cual se extiende más allá de los espacios ubicados en la dirección del usuario. Además, la lógica de la cuenta no puede usar variables de contexto como &quot;<code>block.number</code>&quot;. Otra restricción importante es que la cuenta debe incrementar su <strong>&quot;</strong><code>nonce</code><strong>&quot; en 1</strong>, lo cual se hace para <strong>preservar la resistencia a la colisión de hash de transacciones</strong>. Es importante mencionar que esta limitación podría eliminarse en el futuro para permitir casos de uso más genéricos, como por ejemplo, en <strong>protocolos de privacidad.</strong></p><h2 id="h-data-availability" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">📊️ Data Availability</h2><p>A continuación presentamos un ejemplo de cómo cada <strong>Hyperchain puede administrar su política de disponibilidad de datos (DA)</strong> mediante una interfaz de contrato inteligente. Los usuarios pueden elegir entre varias opciones o incluso aplicar lógicas más complejas. Por ejemplo, una combinación de zkPorter y Validium puede requerir tanto un quórum de firmas de los tutores como un número de firmas del comité de disponibilidad de datos. En la imagen que mostramos a continuación, se puede observar cómo se estructura la DA y cómo se integra en el ecosistema zkSync.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0e7d88e9db14e29e335f86e4c274813e1db65d58ef4602684c042a98c61ae3a4.png" alt="Layer 3 y DA en zkSync" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Layer 3 y DA en zkSync</figcaption></figure><h3 id="h-zk-rollup" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🌀️ ZK Rollup</h3><p>Los valores de cada ranura de almacenamiento modificada al final del bloque deben publicarse como datos de llamada en L1. Tenga en cuenta que los cambios repetidos <strong>(o cambios de ida y vuelta que dan como resultado una diferencia neta</strong>) no se publican. <strong>Significa que si un bloque contiene 100 intercambios ETH/DAI en el mismo DEX, los costos de publicación de datos se amortizarán parcialmente en todos esos intercambios</strong>. Una Hyperchain que funciona en este modo hereda estrictamente las propiedades de seguridad total y resistencia a la censura de Ethereum. La implementación de zkRollup en modo de salida estará disponible desde el día 1. Para propagar los datos de llamadas a L1, se agregarán a la cadena base. <strong>Tenga en cuenta que si la prueba ZK de Hyperchain es potencialmente grande en tamaño y/o computacionalmente pesada para verificar, solo incurre en costos L2 y no en costos de publicación.</strong></p><ul><li><p><strong>ZK Rollup (solo entradas):</strong> esta política requerirá la publicación de entradas de transacciones completas en lugar de actualizaciones de almacenamiento finales. La reconstrucción del estado sin confianza y los costos de DA en este caso serán 100% idénticos a los paquetes acumulativos optimistas (pero con todos los beneficios de un ZK Rollup, por supuesto, incluida una mejor seguridad y salidas más rápidas). La implementación de esta opción se deriva fácilmente de la implementación del ZK Rollup normal. Se puede explorar mediante cadenas específicas de la aplicación donde las entradas de tx son cortas pero pueden generar muchos cambios en los datos (por ejemplo, realizar simulaciones financieras).</p></li><li><p><strong>ZK Rollup (autohospedado):</strong> en este modo, los usuarios alojan ellos mismos los datos de todas las cuentas que poseen. Para hacer cumplir esto, se requieren firmas de confirmación del usuario para realizar cualquier cambio, lo que significa que no puede enviar fondos directamente a otro usuario. En su lugar, quemará los fondos y creará una prueba de esta quema, que puede proporcionar a su destinatario a través de un canal fuera de la cadena. El destinatario luego los canjeará en su cuenta. Esto puede parecer complicado, pero es fácil construir una interfaz de usuario agradable que abstraiga la UX, haciéndola prácticamente indistinguible del envío y la recepción de fondos en Ethereum (canjeará automáticamente todos los activos recibidos en el momento en que el usuario intente gastar los fondos, sin necesidad de clics adicionales). Pero aquí viene un milagro: <strong>un ZK Rollup autohospedado puede estar satisfecho con tan solo 5 bytes</strong> por interacción de usuario, que incluye un lote de muchas transacciones arbitrarias. Esto hace que el Ethereum fragmentado sea infinitamente escalable para cualquier propósito práctico en el modo zkRollup (es decir, <strong>100 % seguro y resistente a la censura</strong>). Esta es una forma de incorporar a cada persona en la Tierra a Ethereum sin comprometer la seguridad. Una gran ventaja de este enfoque es que es totalmente compatible con nuestra implementación zkEVM, pero aún así puede ofrecer privacidad a los usuarios. La implementación no es trivial, por lo que esperamos que sea la última entre todas las demás opciones.</p></li></ul><h3 id="h-zkporter" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🛡️ zkPorter</h3><p>Ya tienen una red de prueba de <strong>zkPorter guardian</strong> en funcionamiento. Esperan que zkPorter sea popular entre los usuarios dispuestos a asumir mayores riesgos de seguridad a cambio de transacciones realmente económicas, hasta que se implemente Danksharding. Los desarrolladores de Hyperchain podrán aprovechar el <strong>DA</strong> desde la implementación principal de zkPorter de zkSync o iniciar su propia red de guardianes (lo que podría ser interesante para las grandes comunidades en línea existentes, como <strong>Reddit</strong> o <strong>Twitter</strong>).</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/409f3312cd595f817cf622eb6b98cdf5370a1b4b56037db2839dfee06cd54e74.jpg" alt="Guardianes en zkPorter" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Guardianes en zkPorter</figcaption></figure><h3 id="h-validium" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🕵️‍♂️ Validium</h3><p>Hay casos de uso en los que el uso de validium está totalmente justificado, por ejemplo, <strong>cadenas empresariales que requieren auditabilidad y privacidad</strong> (dado que la disponibilidad de datos en tales casos está controlada por una parte central, es trivial mantener la privacidad de una Hipercadena de este tipo simplemente reteniendo datos). Dado que validium es esencialmente un caso más simple de zkPorter, los desarrolladores pueden implementar fácilmente Hyperchains en función de esta política.</p><h3 id="h-particiones-logicas-de-estado" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🌳 Particiones lógicas de estado</h3><p>Cada Hyperchain tiene la capacidad de crear <strong>una</strong> o <strong>varias particiones lógicas</strong> que, aunque forman parte del mismo estado, se ubican en <strong>diferentes subárboles</strong> y aplican <strong>políticas de disponibilidad de datos distintas</strong>. Desde la perspectiva del usuario, estas particiones se perciben como instancias separadas de Hyperchain, con su propio ID de cadena, conexión de billetera, explorador de bloques, etc. No obstante, estas particiones <strong>pueden interoperar de forma sincrónica</strong>, lo que permite <strong>realizar transacciones atómicas</strong> entre ellas y desbloquea múltiples casos de uso como:</p><ul><li><p>Leer el estado de otra partición de forma transparente.</p></li><li><p>Utilizar préstamos flash entre particiones.</p></li></ul><p>Un ejemplo destacado de esta interoperabilidad se logra mediante una combinación de zkRollup + zkPorter, que será parte de la <strong>Basechain</strong> de zkSync.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d907ea5a263d66222082a7ab9bfb5759cd59501b7795058b919e841f2d9d2198.png" alt="Combinación de DA entre zkPorter + zkRollup" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Combinación de DA entre zkPorter + zkRollup</figcaption></figure><h3 id="h-privacidad" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🔒 Privacidad</h3><p>Existen varias maneras en que las hipercadenas pueden mejorar la privacidad y la confidencialidad de los datos.</p><ul><li><p><strong>Validium:</strong> para una Hyperchain que se ejecuta en el modo validium, la privacidad del mundo exterior se logra de forma inmediata siempre que el operador mantenga en secreto los datos del bloque. Esta podría ser una opción interesante para usuarios empresariales.</p></li><li><p><strong>Protocolos de privacidad:</strong> para implementar la privacidad a nivel de usuario, se requiere un protocolo <strong>L3</strong> especializado. Los proyectos como <strong>Aztec</strong> o <strong>Tornado</strong> se pueden implementar directamente en la cadena base (<strong>aprovechando la abstracción de cuentas y la verificación recursiva ZKP económica en zkSync</strong>), o pueden optar por Hyperchains independientes de propósito especial para una mayor flexibilidad.</p></li></ul><h3 id="h-agradecimientos" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🫂 Agradecimientos</h3><p>Hemos llegado al final de la <strong>segunda parte</strong> de nuestra serie sobre zkSync, donde exploramos <strong>el futuro de la escalabilidad</strong> de esta solución. En la <strong>tercera y última</strong> edición, nos enfocaremos en el desarrollo con zkSync Era y nos gustaría invitarte a participar en una <strong>Dapp muy especial</strong> que hemos preparado para todos. Esperamos que “<strong>nos escribas tus mensajes</strong>”... Mantente atento para más información en breve.</p><p>También pueden consultar nuestra <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/39d63a8af9ca4524a7237b1f2456e745"><strong>Biblioteca de Layer 2 en Español</strong></a> para tener una información más detallada o ir directamente en este caso a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://layer2es.notion.site/zkSync-Era-5948dd56f580431a8de584a7ad428ba4"><strong>zkSync Era</strong></a><strong>.</strong></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Layer2es/status/1638575210772287490">https://twitter.com/Layer2es/status/1638575210772287490</a></p><hr><p>🎉 ¡Gracias por leer hasta el final! Si está interesado en continuar aprendiendo y colaborando con nosotros, le invitamos a unirse a la vibrante comunidad de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/l2espaniol">Telegram L2 en Español</a> y a seguirnos en nuestro <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="">Twitter L2 en Español</a>. Allí encontrará una gran cantidad de información sobre Layer 2 y el ecosistema de Blockchain en general. ¡Te Esperamos!</p>]]></content:encoded>
            <author>layer2es@newsletter.paragraph.com (L2 en Español)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/9a30ed01f58309fa168174b6ea2a333c2c17947c1807e177b5e5cead9074a261.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Analizando la arquitectura de zkSync Era]]></title>
            <link>https://paragraph.com/@layer2es/analizando-la-arquitectura-de-zksync-era</link>
            <guid>OMBF7CV94q56KxCvc01x</guid>
            <pubDate>Wed, 08 Mar 2023 22:23:55 GMT</pubDate>
            <description><![CDATA[Series zkSync Parte 1/3 Hola comunidad 👋 Desde L2 Español, nos hemos propuesto analizar en profundidad la arquitectura de zkSync, así como explorar sus principios y su utilidad tanto para usuarios como para desarrolladores. En esta serie de tres partes, examinaremos distintos aspectos de esta tecnología, comenzando por la definición de zkSync y su funcionamiento en el sistema de transacciones. En esta misma parte, también trataremos otros temas relevantes de zkSync que permitirán a los lecto...]]></description>
            <content:encoded><![CDATA[<p><strong><em>Series zkSync Parte 1/3</em></strong></p><p>Hola comunidad 👋</p><p>Desde L2 Español, nos hemos propuesto analizar en profundidad la <strong>arquitectura de zkSync</strong>, así como explorar sus principios y su utilidad tanto para usuarios como para desarrolladores. En esta serie de <strong>tres partes</strong>, examinaremos distintos aspectos de esta tecnología, comenzando por la definición de zkSync y su funcionamiento en el sistema de transacciones.</p><p>En esta misma parte, también trataremos otros temas relevantes de zkSync que permitirán a los lectores tener una visión más completa de esta solución, sus características y beneficios en relación a la escalabilidad de blockchain. Esperamos que esta serie de artículos sea de gran ayuda para comprender mejor zkSync y cómo se puede utilizar para mejorar la experiencia de los usuarios y desarrolladores en la cadena de bloques.</p><p>Además, hemos creado una parte interactiva con un tutorial de <strong>“Crosschain Governance”</strong> para que todos puedan incrementar un contador desde L2, así los usuarios podrán tener una experiencia práctica y ver en acción cómo funciona zkSync.</p><p>Estamos emocionados de presentar esta serie y esperamos que sea de gran interés y utilidad para todos.</p><h2 id="h-introduccion-a-zksync" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">💻 Introducción a zkSync</h2><p>zkSync es un protocolo de capa 2 de Ethereum, que fue lanzado en 2020 con el objetivo de proporcionar transacciones escalables y de bajo costo en la cadena de bloques de Ethereum. Fue desarrollado por <strong>Matter Labs</strong>, una empresa de investigación y desarrollo en tecnología blockchain, y se basa en la tecnología de &quot;rollups&quot; para lograr este objetivo.</p><p>En el caso de zkSync, los rollups se combinan con la tecnología de pruebas de conocimiento cero (ZK).</p><p>zkSync <strong>es operado centralmente</strong> por el equipo de Matter Labs, pero se espera que <strong>se traslade a un modelo descentralizado en el futuro cercano</strong>. Con su enfoque en la escalabilidad, la privacidad y la accesibilidad, zkSync es una tecnología emocionante que podría desempeñar un papel importante en el futuro de Ethereum y la tecnología blockchain en general. A continuación, presentamos los datos de la actividad que ha tenido zkSync en un período de aproximadamente 3 meses.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/51f332b724e7235d2430ada3a46a25dc2424dfe7f55d07ca9ff794163f8c949d.png" alt="Actividad en zkSync en 3 meses" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Actividad en zkSync en 3 meses</figcaption></figure><h3 id="h-fair-onboarding-alpha" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🚀 Fair Onboarding Alpha</h3><p>Como ya adelantamos en nuestra <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://l2enespaniol.substack.com/p/newsletter-3-l2-en-espanol#%C2%A7zksync-ahora-es-zksync-era">Newsletter #3</a>, Fair Onboarding Alpha marca un hito emocionante en la adopción de la criptografía para la soberanía personal. El primer <strong>zkEVM en Mainnet</strong> de Ethereum, finalmente abrió sus puertas para permitir que <strong>los proyectos registrados</strong> se implementen en <strong>la red principal</strong>. Este evento representa una gran oportunidad para miles de desarrolladores y millones de personas que quieren utilizar la criptografía para escalar Ethereum y preservar sus valiosas propiedades.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8eefc1a5ef3e416948c8dbf18b5d255f6d40c0889d3ca2e9018778acae205c62.png" alt="Fair Onboarding Alpha " blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Fair Onboarding Alpha</figcaption></figure><p>Para llegar a este punto, zkSync ha contado con el apoyo inquebrantable de su comunidad, la empresa se enorgullece de haber contado con su apoyo en cada paso del camino, como resultado, zkSync ha prometido ser completamente de código abierto, y ha cumplido su promesa al hacer que <strong>“zkSync 2.0 sea zkSync Era”</strong> y <strong>“zkSync 1.0 sea zkSync Lite”.</strong> La nueva marca, <strong>Era</strong>, representa una nueva fase en la adopción de la criptografía y habla de la visión de zkSync para una nueva era de Ethereum.</p><p>El nombre “<strong>ERA</strong>” ha sido elegido bajo el siguiente razonamiento:</p><ul><li><p><strong>Es simple y universalmente entendido</strong></p></li><li><p><strong>Tiene un amplio atractivo y amplia aplicabilidad</strong></p></li><li><p><strong>Habla de la visión de zkSync para una nueva era de Ethereum.</strong></p></li></ul><p>Como parte de este nuevo hito, zkSync también lanzó una distinción clara entre las dos versiones de su solución de escalabilidad de Ethereum. <strong>zkSync 1.0,</strong> ahora <strong>zkSync Lite,</strong> es una versión reducida del protocolo, que ha sido simplificada y optimizada para dApps más simples. zkSync Era, por otro lado, es una versión más completa que cuenta con un zkEVM completamente funcional y una amplia gama de herramientas y funcionalidades para los desarrolladores.</p><p>Durante el período de Fair Onboarding Alpha, zkSync permitirá que solo los proyectos registrados puedan implementar y probar sus dApps en la red principal de zkSync. Para ello, es necesario que los proyectos se registren <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://forms.gle/KBreznP3g8aJYTJS7">aquí</a>.</p><p>Es importante tener en cuenta que, durante Fair Onboarding Alpha, <strong>Mainnet permanecerá cerrado para los usuarios finales</strong>. Esto se debe a que los equipos pueden implementar y probar sus aplicaciones en un entorno cerrado antes de que el sistema se abra a usuarios externos. A pesar de que la seguridad sigue siendo una prioridad máxima para zkSync, <strong>no se recomienda bifurcar el código todavía hasta el Full Launch Alpha.</strong></p><h2 id="h-nueva-era-y-su-zkevm" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🌅 Nueva Era y su zkEVM</h2><p>La zkEVM es una arquitectura que permite la generación de pruebas de conocimiento cero (ZKP), para la ejecución de contratos inteligentes escritos originalmente para EVM.</p><p>La arquitectura de zkSync Era y su zkEVM se basa en los siguientes componentes:</p><ul><li><p><strong>zkVM:</strong> una máquina virtual similar a <strong>RISC</strong>, <strong>completa en Turing</strong> y optimizada para pruebas en un <strong>circuito ZKP</strong>. Tiene varias implementaciones: <strong>Executor</strong> (ejecución nativa rápida en CPU), <strong>generador de testigo</strong> (executor nativo para generar un testigo ZKP), y <strong>probador</strong> (implementación real del circuito ZKP).</p></li><li><p><strong>Copilador basado en LLVM con frontend de Solidity:</strong> (más precisamente, frontend de Yul) y Vyper, y backend zkVM.</p></li><li><p><strong>Circuitos de propósito especial:</strong> (que dependen en gran medida de las compuertas y tablas de búsqueda personalizadas de <strong>PLONK</strong>) como &quot;<strong>precompilaciones</strong>&quot; para operaciones computacionalmente intensivas, como hashes no algebraicos (Keccak, SHA256, Blake2), <strong>acceso al almacenamiento</strong> (caminos de Merkle), emparejamiento de <strong>curvas elípticas</strong> y <strong>circuitos de agregación recursiva</strong> (combina las pruebas de las partes mencionadas anteriormente).</p></li></ul><p>Podemos resumir la zkEVM como <strong>una arquitectura que permite generar pruebas de conocimiento cero para contratos inteligentes</strong>, con componentes clave como <strong>zkVM</strong>, un compilador basado en <strong>LLVM</strong> y circuitos de propósito especial. zkVM hereda estrictamente el modelo de programación EVM y sus invariantes, incluidas las convenciones de llamadas ABI, y admite reversiones y transacciones reversibles para garantizar la protección mutua.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f52c2313126bfd1bc95d9c31c561c2eb52ea6fe876af569ac44e8f872ab9db5f.jpg" alt="Arquitectura de Copiladores de zkSync y zkEVM" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Arquitectura de Copiladores de zkSync y zkEVM</figcaption></figure><p><strong><em>Los desarrolladores pueden confiar en la resistencia a la censura proporcionada por L1 sin cambios relacionados con el mecanismo de escotilla de escape, lo que significa que los activos en una cuenta zkRollup en zkSync tienen las mismas garantías de seguridad que en L1.</em></strong></p><h3 id="h-mejoras-en-la-evm" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🆕🆙 Mejoras en la EVM</h3><p>La zkEVM mejora la adopción y beneficia los proyectos de ecosistema al mantener la máxima compatibilidad con el EVM y agregar mejoras significativas.</p><p>Una de ellas es el compilador basado en <strong>LLVM,</strong> este aumenta la eficiencia del código y permite integrar bases de código de otros lenguajes de programación. Además, el zkEVM incluye la <strong>abstracción de cuenta (AA),</strong> una función esperada por la comunidad de desarrolladores de Ethereum, que mejora la experiencia del usuario al ofrecer soporte nativo para billeteras de contratos inteligentes, <strong>mejor UX para multisigs</strong> (dirección que está asociada con más de una clave privada), la <strong>posibilidad de pagar tarifas de transacción en cualquier token</strong> y permitir que los protocolos puedan <strong>subsidiar el gas</strong> para los usuarios de sus contratos inteligentes.</p><p>También permite <strong>confirmar lotes de transacciones con un solo clic</strong>, lo que mejora la UX en Ethereum.</p><h2 id="h-transacciones" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🌐 Transacciones</h2><p>Las transacciones en Ethereum son instrucciones firmadas criptográficamente por una cuenta externa (una cuenta propiedad de un usuario y no de un código). Estas instrucciones se almacenan en la blockchain y se añaden a un bloque. <strong>El estado de la máquina virtual de Ethereum (EVM) cambia cuando se inicia una transacción</strong>. Una transacción puede ser cualquier cosa, desde enviar ether a otra cuenta hasta invocar las funciones de un contrato inteligente.</p><h3 id="h-como-funcionan-las-transacciones" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">¿Cómo funcionan las transacciones?</h3><p>Cuando un usuario inicia una transacción en Ethereum, se crean algunos datos específicos:</p><ul><li><p><strong>Receptor:</strong> el receptor es la dirección de la cuenta para recibir la transacción, este receptor puede ser una cuenta de contrato o una cuenta externa. Cada transacción va dirigida a un destinatario concreto.</p></li><li><p><strong>Nonce:</strong> este campo muestra la transacción más reciente basada en el contador de la cuenta, que mantiene un registro de cuántas transacciones realiza. La red utiliza el nonce de la transacción para garantizar que las transacciones se completan en la secuencia correcta.</p></li><li><p><strong>Precio del gas:</strong> la mayoría de las transacciones requieren el pago de una tasa al autor de la transacción, este coste se calcula por unidad de gas. La unidad es <strong>wei</strong>, una unidad de éter más pequeña.</p></li><li><p><strong>Límite de gas:</strong> el autor de la transacción especifica el número de unidades de gas utilizadas para la transacción y es la cantidad total de gas que se puede consumir.</p></li><li><p><strong>Valor:</strong> la cantidad de wei o Éter que la cuenta remitente desea transmitir al destinatario está representada por el valor.</p></li><li><p><strong>Datos:</strong> si el receptor de la transacción es un contrato inteligente, los datos contienen información para que se ejecuten las funciones del contrato. Se compone de datos de longitud variable.</p></li><li><p><strong>Firma:</strong> la firma indica quién ha enviado la comunicación, la firma se crea cuando una cuenta externa confirma y firma la transacción con su clave privada.</p></li></ul><h3 id="h-tipos-de-transacciones" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🔄 Tipos de transacciones</h3><p>Las transferencias de activos tales como ETH, tokens o interacciones con contratos son funcionalidades básicas en Ethereum para entre cuentas. Este tipo de transferencias son comunes en las operaciones diarias de la red y son necesarias para llevar a cabo cualquier tipo de transacción en Ethereum. Por otro lado, las transacciones de despliegue de contratos son aquellas en las que se crea un nuevo contrato inteligente en la red de Ethereum.</p><p>El despliegue de contratos en zkSync es bastante diferente al de Ethereum:</p><ul><li><p><strong>Ethereum:</strong> el <strong>despliegue</strong> de contratos se produce cuando <strong>un usuario envía una transacción a la dirección cero (0x000...000)</strong> con el campo de datos de la transacción igual al bytecode del contrato concatenado con los parámetros del constructor.</p></li><li><p><strong>zkSync:</strong> para <strong>desplegar</strong> un contrato en zkSync, <strong>un usuario llama a la función create del </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://era.zksync.io/docs/dev/developer-guides/system-contracts.html#contractdeployer"><strong>ContractDeployer</strong></a> y proporciona el hash del contrato a publicar, así como los <strong>argumentos</strong> del constructor. El propio bytecode del contrato se suministra en el campo <code>factory_deps</code> de las transacciones <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-712"><strong>EIP-712</strong></a>. Si el contrato es una fábrica (es decir, puede desplegar otros contratos), los bytecodes de estos contratos deben incluirse también en factory_deps.</p></li></ul><p>zkSync soporta los tipos de transacción &quot;antiguos&quot; (pre <strong>EIP-2718</strong>) de Ethereum, el tipo de transacción <strong>EIP-1559</strong> y sus transacciones <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://eips.ethereum.org/EIPS/eip-712">EIP-712</a>. Las transacciones de este tipo se pueden utilizar para acceder a características específicas de zkSync como la abstracción de cuentas. <strong><em>Además, los contratos inteligentes sólo pueden desplegarse con este tipo de transacción.</em></strong></p><h3 id="h-cuando-se-considera-que-una-transaccion-es-final" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">¿Cuándo se considera que una transacción es final?</h3><p>La finalidad de una transacción se refiere a la promesa de que las transacciones no pueden ser revertidas, alteradas o mutadas en el contexto de una red blockchain.</p><p>Bajo prueba de participación, las transacciones de Ethereum finalizan en <strong>2,5 épocas (16 minutos)</strong> de media en condiciones normales: <strong><em>revertir esa transacción costaría 1/3 del suministro total de Ethereum.</em></strong></p><p>Una vez que un bloque se ha llenado y sellado en ZK Rollups, su estado se registra en la cadena principal de Ethereum. A continuación, se inicia la etapa de comprobación y se construye una prueba de validez <strong>SNARK</strong> para cada transacción de bloque. Una vez completada, la SNARK se envía para su verificación en el contrato inteligente L1, y el estado de la transacción se convierte en definitivo tras la verificación.</p><p>Desde el punto de vista de zkSync, <strong>la finalidad se produce cuando la transacción (la verificación SNARK) es ejecutada por L1.</strong> En este punto, las garantías son las mismas que cualquier otra transacción L1 dentro del mismo bloque L1, cuantos más bloques L1 se emitan después de que se procese el bloque inicial, menos probable será que esta transacción se anule.</p><p>Cuando un usuario transmite una transacción, zkSync espera actualmente a que se llene todo el bloque, lo que significa que el tiempo de finalidad puede ser mayor dependiendo del volumen de transacciones enviadas a través de zkSync. El tiempo de finalización se reducirá a medida que aumente el rendimiento.</p><h2 id="h-los-operadores-o-secuenciadores" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">👩🏼‍💻 Los Operadores o Secuenciadores</h2><p>Los operadores son los actores que llevan a cabo las funciones esenciales de zkRollup. Son responsables de producir bloques, empaquetar transacciones, realizar cálculos y enviar datos a la cadena principal de Ethereum para su verificación.</p><h3 id="h-bloques-en-la-era-zksync" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🟪 Bloques en la era zkSync</h3><p>En zkSync existen dos nociones de <strong>bloques</strong>, los bloques a nivel de L2 y los bloques entendidos como lotes o “<em>batches</em>” para el rollup en L1.</p><ul><li><p><strong>Bloques en L2</strong>: son simplemente los bloques creados en L2, es decir, en la red zkSync y <strong>no se incluyen en la cadena Ethereum</strong>. Un bloque L1 <strong>rollup</strong>, que le dan el nombre de &quot;<strong>lote</strong>&quot;, es <strong>un conjunto de bloques</strong> (L2) consecutivos, contiene todas las transacciones, y en el mismo orden, desde el primer bloque del lote hasta el último bloque del lote.</p></li><li><p><strong>Lotes para L1</strong>: como su nombre indica se envían a Ethereum. La razón principal para tener estas nociones diferentes es que un bloque puede contener un número mínimo de transacciones, y así ser procesado rápidamente, mientras que en un lote pueden incluir muchas transacciones, para hacer que el coste de la interacción con L1 se reparta entre muchas transacciones.</p></li></ul><h3 id="h-tiempo-de-procesamiento-de-los-bloques" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">⏳ Tiempo de procesamiento de los bloques</h3><p>El operador procesa inmediatamente las transacciones y las añade a los bloques, que se generan inmediatamente. <strong>Una vez que zkSync esté totalmente descentralizado, el tiempo de bloque tardará un par de segundos</strong>, ya que las entidades implicadas necesitan alcanzar un consenso.</p><p>En general, un lote (rollup) se sellará cuando:</p><ul><li><p>Se alcanza la &quot;capacidad&quot; del lote.</p></li><li><p>La capacidad incluye el gas L1 utilizado, el gas L2 consumido y otros parámetros.</p></li><li><p>Ha transcurrido el tiempo de espera del lote.</p></li></ul><p>Cada lote L1 (que comprende varios bloques L2) se ejecuta en una única instancia de <strong>VM</strong>. La VM ejecuta las transacciones una a una y luego ejecuta algún código que no tiene nada que ver con la última transacción, sino con todo el lote. Actualmente, el ETH recaudado de las comisiones se transfiere desde la dirección formal del <code>bootloader</code> a la dirección del minero de bloques. La cuestión es que esta transferencia emite un evento (como cualquier otra transferencia), de ahí que hayan incluido este evento en un bloque L2 para que sea accesible vía API.</p><p>Es posible añadir eventos en el último bloque L2 del lote L1, pero debemos considerar ciertos escenarios. Por ejemplo, si un bloque L2 ya se ha cerrado, pero su lote L1 aún no, y no se han recibido nuevas transacciones en un tiempo, entonces el lote L1 debe cerrarse para evitar tiempos de espera. Si añadimos el evento al último bloque cerrado, se modificará el bloque y se generará una reorganización en la cadena de bloques.</p><p>Para evitar esta situación, se construye un bloque puramente ficticio que sólo contiene el evento. De esta manera, se evita modificar el último bloque cerrado y se mantiene la integridad de la cadena de bloques.</p><h3 id="h-hashes" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">#️⃣ Hashes</h3><p>Los <strong>hashes</strong> de bloque en zkSync <strong>son deterministas</strong>, la razón de tener un hash de bloque determinista es que <strong>estos hashes no son demostrables</strong> (recuerde que los bloques L2 no se envían a L1). Se recomienda a los proyectos que no utilicen el hash de bloque L2 como fuente de aleatoriedad.</p><h3 id="h-propiedades-de-los-bloques-en-l2" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">📜 Propiedades de los Bloques en L2</h3><p>En este texto se presentan las principales propiedades de los bloques en L2 de zkSync, además, se destaca que zkSync <strong>no tiene consenso de prueba de trabajo</strong>.</p><ul><li><p><strong>Marca de tiempo:</strong> la hora de creación del bloque actual en segundos que devuelve la marca de tiempo del lote L1.</p></li><li><p><strong>Número de bloque:</strong> el número secuencial único de este bloque.</p></li><li><p><strong>Límite de gas:</strong> el límite de gas del bloque actual, siempre devuelve 2^32-1.</p></li><li><p><strong>Coinbase:</strong> la dirección del minero del bloque actual, devuelve la dirección del <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://era.zksync.io/docs/dev/developer-guides/system-contracts.html#bootloader">bootloader</a>.</p></li><li><p><strong>Dificultad:</strong> la dificultad del bloque actual, devuelve 2500000000000000 (zkSync no tiene consenso de prueba de trabajo).</p></li></ul><h3 id="h-la-etapa-de-validacion" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🕵️‍♂️ La etapa de validación</h3><p>Durante el paso de validación, la cuenta debe decidir si acepta la transacción y, en caso afirmativo, pagar las comisiones correspondientes. Si falla alguna parte de la validación, no se cobra comisión a la cuenta, y dicha transacción no puede incluirse en un bloque.</p><ul><li><p><strong>Paso 1.</strong> El sistema comprueba que el <strong>nonce</strong> de la transacción no se haya utilizado antes.</p></li><li><p><strong>Paso 2.</strong> El sistema llama al método <code>validateTransaction</code> de la cuenta. Si no revierte, procede al siguiente paso.</p></li><li><p><strong>Paso 3.</strong> El sistema comprueba que el <code>nonce</code> de la transacción se ha marcado como utilizado.</p></li><li><p><strong>Paso 4 (sin pagador)</strong>. El sistema llama al método <code>payForTransaction</code> de la cuenta. Si no revierte, pasa al siguiente paso.</p></li><li><p><strong>Paso 4 (pagador)</strong>. El sistema llama al método <code>prePaymaster</code> del remitente. Si esta llamada no revierte, se llama al método <code>validateAndPayForPaymasterTransaction</code> del pagador. Si tampoco revierte, se procede al siguiente paso.</p></li><li><p><strong>Paso 5</strong>. El sistema verifica que el gestor de arranque ha recibido al menos <code>tx.gasPrice * tx.gasLimit ETH</code> al gestor de arranque. Si es así, la verificación se considera completa y podemos proceder al siguiente paso.</p></li></ul><h3 id="h-la-etapa-de-ejecucion" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🔐 La etapa de ejecución</h3><p>El paso de ejecución se considera responsable de la ejecución real de la transacción y del envío de los reembolsos de cualquier gas no utilizado al usuario. Si se produce alguna devolución en este paso, la transacción sigue considerándose válida y se incluirá en el bloque.</p><ul><li><p><strong>Paso 6.</strong> El sistema llama al método <code>executeTransaction</code> de la cuenta.</p></li><li><p><strong>Paso 7.</strong> (sólo en caso de que la transacción tenga un pagador) Se llama al método <strong>postOp</strong> del pagador. Este paso debería utilizarse normalmente para reembolsar al remitente el gas no utilizado en caso de que el pagador se haya utilizado para facilitar el pago de comisiones en tokens ERC-20.</p></li></ul><h3 id="h-fees-o-tasas-de-transacciones-en-zksync" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">💸 Fees o Tasas de transacciones en zkSync</h3><p>En zkSync, su objetivo es ser <strong>compatible con Ethereum</strong>, lo que significa que su objetivo es compartir similitudes y minimizar las grandes diferencias, una de esas similitudes es el modelo de tarifa de gas de zkSync.</p><p>La versión de zkSync de gas representa no solo los costos de los cálculos, sino también el costo de publicar datos en la cadena y afectar el almacenamiento.</p><p>Dado que los costos de publicar los datos de llamada en L1 son muy volátiles, la <strong>cantidad de gas</strong> necesaria para <strong>cambiar</strong> una <strong>ranura de almacenamiento no es constante</strong>. Para cada bloque, el operador define los siguientes parámetros dinámicos:</p><ul><li><p><code>gas_price</code><strong>:</strong> la tabla para el precio base actual en cada ficha. El valor de este parámetro se usa para determinar los costos de ejecución de VM en cada token.</p></li><li><p><code>gas_per_pubdata</code><strong>:</strong> el precio gas por publicar un byte de datos en Ethereum.</p></li></ul><p>Tenga en cuenta que los datos públicos se postean solo para diferencias de estado. Si la misma ranura de almacenamiento <strong>se actualiza 10 veces</strong> en el mismo bloque acumulativo, solo se publicará la actualización final en Ethereum, por lo que solo <strong>se cobrará una vez</strong> por los datos públicos.</p><h3 id="h-comparacion-del-modelo-de-tarifas-entre-zksync-y-ethereum" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">📊 Comparación del modelo de tarifas entre zkSync y Ethereum</h3><p>En zkSync, a diferencia de Ethereum, los códigos de operación tienen precios de gas similares debido a que el costo de los mismos es diferente. Por lo general, la propia ejecución de operaciones aritméticas es económica, aunque como en Ethereum, la mayor parte del costo se incurre en actualizaciones de almacenamiento.</p><p>A pesar de estas diferencias, el modelo de tarifas en zkSync es similar al de Ethereum, donde la operación más costosa sigue siendo el cambio de almacenamiento. Una ventaja de los ZR Rollup sobre los optimistic rollup, es que, en lugar de publicar todos los datos de transacciones, los ZR Rollup pueden publicar solo las diferencias de estado, lo que minimiza los cambios de almacenamiento.</p><h2 id="h-pruebas-l2-espanol" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🤖 Pruebas L2 Español</h2><h3 id="h-crosschain-governance" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🗳️ Crosschain Governance</h3><p>En este tutorial se mostrará cómo se puede utilizar la <strong>interoperabilidad</strong> entre L1 y L2 para crear un sistema de gobernanza controlado desde L1 y su wallet. Para lograr esto, se crearán dos contratos, uno en L1 y otro en L2.</p><p>El contrato en L2 será un simple contrato de &quot;<strong>contador</strong>&quot; que almacenará un número que puede ser incrementado llamando al método &quot;<strong>increment</strong>&quot;. Este contrato será accesible para todos los usuarios de L2.</p><p>El contrato de gobernanza en L1 tendrá la función de incrementar el contador en L2 y será controlado únicamente por el administrador. Además, este contrato permitirá votar y ajustar otros contratos en L2.</p><p>El creador del contrato será establecido como el único gobernador y se incluirá una función que permitirá solicitar transacciones en L2 a través del contrato inteligente zkSync.</p><p>Para votar desde L2, los usuarios podrán llamar al método &quot;<strong>increment</strong>&quot; en el contrato de contador en L2, pero para realizar ajustes desde L1, el administrador tendrá que llamar al método correspondiente en el contrato de gobernanza en L1, que a su vez llamará al contrato correspondiente en L2.</p><p><strong>En conclusión</strong>, la interoperabilidad entre L1 y L2 permite crear sistemas de gobernanza que pueden ser controlados desde L1, pero accesibles para todos los usuarios en L2. Esta funcionalidad puede ser utilizada para votar, realizar ajustes y controlar otros contratos en L2 desde L1, y todo ello de forma segura.</p><h3 id="h-anadir-red-testnet-zksync-era" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🧪 Añadir red Testnet zkSync ERA</h3><p>Si desea interactuar con zkSync, puede agregar la red Testnet zkSync Era a su Metamask a través del <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://era.zksync.io/docs/dev/fundamentals/interacting.html#connecting-to-zksync-era-on-metamask">enlace oficial proporcionado,</a> o puede hacerlo directamente agregando una nueva red y utilizando la información de conexión específica de zkSync Era que se detalla a continuación.</p><h3 id="h-informacion-de-la-red-de-la-red-de-prueba" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Información de la red de la red de prueba</h3><ul><li><p><strong>Nombre de red</strong>: zkSync Era Testnet</p></li><li><p><strong>Nueva URL de RPC:</strong> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zksync2-testnet.zksync.dev">https://zksync2-testnet.zksync.dev</a></p></li><li><p><strong>Identificación de la cadena:</strong> 280</p></li><li><p><strong>Símbolo de moneda:</strong> ETH</p></li><li><p><strong>URL del explorador de bloques:</strong> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goerli.explorer.zksync.io/">https://goerli.explorer.zksync.io/</a></p></li><li><p><strong>URL de WebSocket:</strong> wss://zksync2-testnet.zksync.dev/ws</p></li></ul><p>Para comenzar a utilizar zkSync, primero debe obtener faucet ETH en la red principal (L1) y transferirlos a la red zkSync Era a través del <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goerli.portal.zksync.io/bridge">Portal Bridge</a>. Puede obtener estos tokens ETH desde <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://faucetlink.to/goerli">varios enlaces disponibles</a> en la red L1, o utilizar el <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goerli.portal.zksync.io/faucet">Portal Faucet zkSync Era</a> para recibir una combinación de varios tokens ERC20 de forma gratuita.</p><p>Además, puede revisar la sección de zkEVM en nuestro artículo para obtener más información sobre el funcionamiento de zkSync en la red Ethereum.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Layer2es/status/1618323379010023424">https://twitter.com/Layer2es/status/1618323379010023424</a></p><h3 id="h-incrementar-counter" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Incrementar Counter</h3><p>Primero, desplegamos el contrato de Governance en L1, como se mencionó anteriormente, para que sea responsable de controlar las configuraciones e incluso aumentar el contador desde L1.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/70250cb0228a5e740ffa8ed4f1cf99850b2d8176b0222930745dd3acd156639e.png" alt="Contrato Governance en L1 y su gobernador" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Contrato Governance en L1 y su gobernador</figcaption></figure><p>Una vez que tenga ETH, puede acceder al contrato que hemos implementado y verificado para que el usuario pueda revisarlo y actuar sobre él. Como puede observar, ya se ha definido el contrato de gobernanza en L1 que hemos creado.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/514b66ed7fa2c78fec93f8def0b4876a15f2247984c3043f0985a945454f5912.png" alt="Counter en L2 zkSync con Smart de Governance" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Counter en L2 zkSync con Smart de Governance</figcaption></figure><h3 id="h-interactuar-con-counter" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Interactuar con Counter</h3><p><strong>Si deseas interactuar con el contrato de gobernanza en zkSync, haz </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goerli.explorer.zksync.io/address/0x664991DAD4F2805024ad5090B88EBF509aF53C94#contract"><strong>clic aquí</strong></a><strong> y se mostrará una imagen con el contrato “Counter”</strong> de L2 y su explorador, donde deberá <strong>conectar su billetera, agregar la red de pruebas zkSync ERA y tener fondos en ella.</strong> Luego podrá hacer clic en <strong>&quot;write&quot;</strong> en <strong>“increment”</strong> y deberá <strong>pagar la tarifa</strong> correspondiente a la transacción.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/92876e08af7732b7eed43281b0408d7b3504eaa7474ff358944c2fa0b8d46f29.png" alt="Una vez haya pagado saldrá la transacción con su Hash" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Una vez haya pagado saldrá la transacción con su Hash</figcaption></figure><p>Puede observar como hemos aumentado el contador a <code>1</code>, siéntase libre de probar y aumentar el contador de L2 <strong>utilizando una wallet de Testnet en zkSync</strong>. Hemos configurado el contrato de gobernanza para que los ajustes del contador en L2 estén abiertos a todos los usuarios.</p><p>Sin embargo, es importante destacar que el control del contrato de gobernanza en L1 está limitado al propietario.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4c618a4bff67e47ad615a05d79764bef9f83fbee0931fc1e5279ab7d7385ed4d.png" alt="El contador ha incrementado" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">El contador ha incrementado</figcaption></figure><p><strong>Así de fácil se realiza el voto en Cross Chain utilizando zkSync Era, con un desarrollo sencillo y seguro.</strong></p><ul><li><p>Wallet de prueba: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goerli.etherscan.io/address/0x789D5ce54F8F96369ee01751C5CA8C9fDAB14650">0x789D5ce54F8F96369ee01751C5CA8C9fDAB14650</a></p></li><li><p>Governance L1: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goerli.etherscan.io/address/0xe65abe89399b988c6e358fb788f116d2d1b17316">0xe65abe89399b988c6e358fb788f116d2d1b17316</a></p></li><li><p>Counter L2 modificado: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goerli.explorer.zksync.io/address/0x664991DAD4F2805024ad5090B88EBF509aF53C94">0x664991DAD4F2805024ad5090B88EBF509aF53C94</a></p></li></ul><h3 id="h-agradecimientos" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🫂 Agradecimientos</h3><p>Terminamos <strong>la primera parte</strong> de la serie de zkSync, en esta parte analizamos la arquitectura de esta solución de escalabilidad blockchain. En la <strong>segunda edición</strong>, hablaremos sobre <strong>el futuro de la escalabilidad con zkSync Era</strong> y sus nuevas implementaciones, abordaremos temas muy importantes antes de llegar a la <strong>tercera parte</strong>, en la que estamos preparando una sección <strong>“Extra” interactiva</strong>, en la que esperamos que disfrutes <strong>participando</strong> en actividades relacionadas con zkSync y el ecosistema blockchain.</p><p>🎉 ¡Gracias por leer hasta el final! Si está interesado en continuar aprendiendo y colaborando con nosotros, le invitamos a unirse a la vibrante comunidad de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/l2espaniol">Telegram L2 en Español</a> y a seguirnos en nuestro <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="">Twitter L2 en Español</a>. Allí encontrará una gran cantidad de información sobre Layer 2 y el ecosistema de Blockchain en general. ¡Te Esperamos!</p>]]></content:encoded>
            <author>layer2es@newsletter.paragraph.com (L2 en Español)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/adbd248fb02a9fe44c184972f15871a92b025ccf9875af1c9283886cd3caac39.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[La mentalidad detrás de Scroll]]></title>
            <link>https://paragraph.com/@layer2es/la-mentalidad-detr-s-de-scroll</link>
            <guid>2zRPhWLWm3nKmyfdttds</guid>
            <pubDate>Mon, 27 Feb 2023 21:21:25 GMT</pubDate>
            <description><![CDATA[Traducción del articulo de Ye Zhang@Scroll - “The midset behind Scroll”IntroducciónLos zkEVM se han convertido en un tema muy popular en los últimos 2 años. Podría decirse que se han convertido en la tecnología de oro estándar para escalar Ethereum, no solo a través de la layer 2, sino también directamente a través de la layer 1, "snark Ethereum itself for the end game". Hemos estado impulsando este ambicioso sueño junto con el equipo de Privacy and Scaling Exploration desde el principio, y n...]]></description>
            <content:encoded><![CDATA[<p>Traducción del articulo de Ye Zhang@Scroll - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hackmd.io/@yezhang/B167uMZRs#"><em>“The midset behind Scroll”</em></a></p><h2 id="h-introduccion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Introducción</h2><p>Los zkEVM se han convertido en un tema muy popular en los últimos 2 años. Podría decirse que se han convertido en la tecnología de oro estándar para escalar Ethereum, no solo a través de la layer 2, sino también directamente a través de la layer 1, &quot;<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.reddit.com/r/ethereum/comments/vrx9xe/comment/if7auu7/">snark Ethereum itself for the end game</a>&quot;. Hemos estado impulsando este ambicioso sueño junto con el equipo de <em>Privacy and Scaling Exploration</em> desde el principio, y nos hemos comprometido a seguir construyéndolo en conjunto en el futuro.</p><p>En este artículo, quiero compartir algunas de las lecciones que aprendimos mientras construíamos zkEVM, y cómo hemos estado pensando en diferentes <em>trade-offs</em> a lo largo del camino. Estamos adoptando un enfoque diferente al de otros proyectos en el ecosistema, y ​​esto nos coloca en una posición única.</p><h2 id="h-desarrollo-basado-en-la-comunidad" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Desarrollo basado en la comunidad</h2><p>Scroll es fundamentalmente posible gracias al <em>open-source</em>. Estamos utilizando <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/zcash/halo2">proving stack</a> de Zcash y hemos estado construyendo <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/privacy-scaling-explorations/zkevm-circuits">zkEVM circuits</a> junto con el <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/PrivacyScaling">equipo de PSE</a> desde el primer día. Agradecemos el esfuerzo de la comunidad y todas las herramientas que se están construyendo. Con ese espíritu, una mentalidad importante que tenemos es devolver todo lo que podamos y continuar construyendo con la comunidad de una manera más abierta y colaborativa. Esto distingue nuestro <em>ethos</em> de otros proyectos. Más específicamente, hemos hecho lo siguiente para que el desarrollo de Scroll esté orientado a la comunidad:</p><ul><li><p><strong>Educación pública para un público amplio</strong>. Para ayudar a las personas a comprender nuestra arquitectura, hemos dado múltiples charlas y organizado eventos a nivel mundial. Puede encontrarnos en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Scroll_ZKP/status/1521677531438628864">Devconnect</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/playlist?list=PLrzRr7okCcmauITgMFrrXdxE-QQ75-i4_">SBC</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/playlist?list=PLrzRr7okCcmZKUhBNRXmK5vWmJMlQZzzD">Devcon</a>, etc. Para los estudiantes que desean aprender más, hemos dado <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://learn.0xparc.org/materials/halo2/learning-group-1/cost-model">conferencias</a> en 0xPARC sobre nuestro <em>proving stack</em>, así como presentaciones en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/watch?v=1bVe77-yfBA&amp;list=PLhA8D_GhTLc5MR5aecbSfL6wvqGS8IOqK">Stanford</a> y <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/watch?v=Ct6H5GcnA0A&amp;t=2395s">Berkeley</a> sobre nuestra investigación. Para los auditores, hemos organizado <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/playlist?list=PLrzRr7okCcmZmDrVozX5hhBQlsrpZdsij">sesiones especiales</a> de auditores sobre nuestro código base. También creamos con frecuencia recursos educativos para las comunidades generales de zk y Ethereum: organizamos una <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://youtube.com/playlist?list=PLrzRr7okCcmbAlgYpuFjzUJv8tAyowDQY">serie semanal de investigación aplicada de zk</a> y compartimos publicaciones técnicas sobre <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scroll.io/blog/proofGeneration">zk tech</a> y <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scroll.io/blog/kzg">Ethereum</a>.</p></li><li><p><strong>Desarrollar con la comunidad.</strong> Nuestro zkEVM se ha desarrollado a través de un enfoque totalmente impulsado por la comunidad desde el primer día. Además de nuestro equipo y el equipo de PSE, hay varios miembros de la comunidad que contribuyen a diferentes partes de zkEVM (por ejemplo, muchos <em>opcode circuit</em> han sido implementados en paralelo por diferentes miembros de la comunidad, y se han realizado optimizaciones sorprendentes tanto en el <em>keccak circuit</em> como en el <em>snark -verifier</em>). También dirigimos una <em>community call</em> quincenal para mejorar el <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/halo2-ce">proving stack</a> subyacente . Ya se ha logrado un progreso asombroso; por ejemplo, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/halo2-ce/halo2/pull/11">Goldilocks</a> y <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/maxgillett/halo2-fri-gadget">FRI</a> ahora son compatibles con Halo2. ¡Una base sólida gracias al esfuerzo de la comunidad permite la seguridad y la auditoría compartida!</p></li></ul><p>Los beneficios de construir a través de un enfoque impulsado por la comunidad son claros. Podemos intercambiar ideas con un grupo grande y obtener ideas más creativas. Podría decirse que también es más seguro, ya que cada <em>pull request</em> recibe más <em>reviews</em> de otros miembros de la comunidad. Algunas partes comunes incluso se pueden compartir entre proyectos; por ejemplo, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/axiom_xyz">Axiom</a> ha implementado un <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/axiom-crypto/halo2-lib">pairing circuit</a>, que es una de las precompilaciones de zkEVM más difíciles.</p><p>Sin embargo, hay ciertos <em>trade-offs</em> que vienen con la construcción abierta. Es más difícil coordinarse en un grupo grande (no solo en términos de comunicación, sino también de prioridades). Puede ralentizar el desarrollo, ya que muchos <em>pull requests</em> requieren <em>reviews</em> y el estándar para el <em>merging</em> es de un nivel de exigencia alto.</p><p>Algo exclusivo de nuestro zkEVM es que también mantenemos un <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/privacy-scaling-explorations/zkevm-specs">python spec</a>, similar a lo que ha estado haciendo Ethereum para su <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ethereum/consensus-specs">consensus-spec</a> y <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ethereum/execution-specs">execution-spec</a>. Mantener esta especificación permite a las personas que no están familiarizadas con Rust y Halo2 de <em>low-level</em> comprender el <em>circuit logic</em>. Hasta donde yo sé, ninguna otra implementación de zkEVM se toma el tiempo para hacer esto, de modo que puedan enviar más rápido y acercarse a <em>mainnet</em> de manera más agresiva.</p><p><strong>En Scroll, estamos adoptando este enfoque impulsado por la comunidad para desarrollar todo el zkEVM. Creemos que el camino correcto a seguir es construir con la comunidad desde el principio.</strong> Tenga en cuenta que el &quot;<em>desarrollo impulsado por la comunidad</em>&quot; significa mucho más que ser solo <em>open-source.</em> No significa construir en privado y luego, de repente, abrir todo el código algún día. Debe medirse por cuántos <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/privacy-scaling-explorations/zkevm-circuits/graphs/contributors">external contributors</a> hay y cómo se desarrolló el proyecto a lo largo del tiempo. Aceptamos el <em>trade-off</em> de ser más lentos en las primeras etapas, pero creemos en el poder del desarrollo impulsado por la comunidad en las etapas posteriores a medida que nuestra comunidad continúa creciendo.</p><p>Ethereum ha adoptado una estrategia similar para lograr su visión y valores llamada &quot;<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/watch?v=noXPewi5qOk">sustracción</a>&quot;. La idea es bastante simple: en lugar de construir todo por su cuenta, apoyan a la comunidad tanto como pueden. Les ayuda a buscar el equilibrio adecuado y centrarse en las cosas que son realmente importantes para ellos. Estamos haciendo exactamente lo mismo. Nos preguntamos: &quot;<em>¿Qué tipo de apoyo podemos brindar a la comunidad para ayudarlos a construir?</em>&quot; Creemos que nuestro enfoque de base y orientado a la comunidad nos llevará a una posición única en el espacio.</p><p><strong>Esta mentalidad nos diferencia de otros competidores que tienen un gran ejército de personas que crean múltiples soluciones internas y que comercializan locamente en todas las direcciones. Solo nos enfocamos en enviar la pieza más importante y liderar en la dirección correcta.</strong></p><h3 id="h-tenga-en-cuenta-la-seguridad-y-garantice-un-lanzamiento-constante" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Tenga en cuenta la seguridad y garantice un lanzamiento constante</h3><p>La seguridad es la principal razón por la que la gente cree en la <em>layer 2</em> en comparación con la <em>layer 1</em> alternativa: puede heredar la seguridad de Ethereum sin confiar en los operadores de la <em>layer 2</em>. Pero todos los proyectos de layer 2 existentes todavía están lejos de ese estándar, con diferentes <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethereum-magicians.org/t/proposed-milestones-for-rollups-taking-off-training-wheels/11571">training wheels</a> en su lugar. Por ejemplo, para los optimistic rollups, incluso si muchos ya se han lanzado en <em>mainnet</em>, aún necesitan <em>upgradable keys</em> y no admiten <em>permissionless fraud proofs</em>.</p><p><strong>Para los zkEVM, también es un gran problema: cada <em>player</em> está en una carrera larga y necesita múltiples iteraciones, independientemente de cuán agresivo sea su approach de acercarse a <em>mainnet</em>.</strong> Todavía hay problemas fundamentales relacionados con zkEVM que no se han resuelto. Por ejemplo, el costo del <em>prover</em> será diferente del <em>execution cost</em>, y esto influirá en el <em>gas pricing</em> de la <em>layer 2</em> o introducirá vulnerabilidades de seguridad.</p><p>Hemos reflexionado sobre los problemas de seguridad y hemos tratado de tomar las mejores decisiones. Enumero algunas de esas decisiones a continuación:</p><ul><li><p><strong>Adopte un enfoque EVM-equivalent.</strong> Una razón importante para adoptar este enfoque es que conduce a una mejor <em>developer experience</em>, pero otra razón más profunda es heredar la seguridad del modelo EVM, que ya ha sido probado en batalla. También estamos reutilizando infraestructura como <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ethereum/go-ethereum">Geth</a> para minimizar nuestra diferencia con Ethereum. Esto garantiza que nuestro <em>secuencer</em> de <em>layer 2</em> se comporte exactamente igual que un nodo de <em>layer 1,</em> lo que maximiza la seguridad.</p></li><li><p><strong>Enfoque orientado a la comunidad.</strong> Como mencioné anteriormente, obtener <em>reviews</em> de <em>reviews</em> de la comunidad externa brinda una garantía más sólida para la seguridad del código. El <em>tooling</em> y el <em>proving stack</em> también se comparten entre proyectos, por lo que prestamos más atención al código base actual. Una buena medida debería ser &quot;<em>¿Cuántas personas están familiarizadas con su código base?</em>&quot;, &quot;<em>¿Cuántas personas lo están usando seriamente?</em>&quot;</p></li><li><p><strong>Auditoría, auditoría y auditoría. Test, test y test.</strong> Hemos organizado sesiones de auditores para enseñarles a los auditores sobre nuestro <em>development stack</em> y hemos contratado a los mejores auditores de la industria para nuestros <em>zkEVM circuits</em>, pero las auditorías externas no son suficientes. Internamente, hemos integrado los <em>test vectors EVM</em> estándar y hemos realizado numerosas simulaciones para probar los bloques de la red principal. Además de eso, también otorgamos <em>grants</em> para respaldar exploraciones como verificación formal y <em>fuzzing</em> para nuestro zkEVM.</p></li><li><p><strong>Investigación sobre <em>training wheels</em>.</strong> Internamente, hemos estado investigando varias soluciones para eliminar las <em>training wheels</em> y cómo garantizar <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethresear.ch/t/2fa-zk-rollups-using-sgx/14462">2FA</a> o 3FA para nuestro zkEVM. Creemos que esto es lo más importante que hay que hacer, aunque tiene menos ruido de marketing que tener nuevas funciones más sofisticadas. Como siempre, compartiremos nuestros hallazgos y discutiremos con la comunidad a medida que avancemos.</p></li></ul><p>**Para mantener un alto nivel de seguridad, optamos por hacer que cada versión sea más estable y repetir la versión existente para seguir mejorando la solidez y la <em>performance</em>. **Haremos que todo sea aún más transparente en nuestros <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Scroll_ZKP/status/1621573571259793408">hilos de actualizaciones semanales</a> .</p><p>Nuestra mentalidad de seguridad primero es la influencia más fuerte con respecto a nuestro <em>roadmap</em>. Nos ayuda a decidir qué camino debemos tomar al mismo tiempo que responde preguntas como:</p><ul><li><p>&quot;¿Deberíamos apuntar a la <em>EVM-equivalence</em> o la <em>Ethereum-equivalence</em> en este momento?&quot;</p></li><li><p>&quot;¿Deberíamos descentralizar el <em>prover</em> o <em>secuence</em>r primero?&quot;</p></li><li><p>&quot;¿Deberíamos seguir agregando nuevas funciones o centrarnos en eliminar las <em>training wheels</em>?&quot;</p></li></ul><p>Iré desgranando cada una de esas preguntas en los siguientes posts.</p><h3 id="h-la-descentralizacion-es-importante-en-todas-las-capas" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">La descentralización es importante en todas las capas</h3><p>Piense en la historia de Ethereum y por qué la gente piensa que es <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://nakamoto.com/credible-neutrality/">creíblemente neutral</a> . No es solo por la tecnología superior, sino también por el camino que tomó para llegar a donde está hoy. Ethereum está descentralizado en cada <em>layer</em> (transparencia en la toma de decisiones, consenso social, etc.). Del mismo modo, definimos la descentralización a través de múltiples <em>layers</em> diferentes y establecemos un estándar extremadamente alto para nosotros mismos:</p><ul><li><p><strong>prover descentralizado</strong>. Somos los primeros en proponer la idea de una <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scroll.io/blog/architecture">proving network descentralizada</a>. Es el primer paso técnico que daremos para lograr la descentralización total y garantizar una alta confiabilidad. Un objetivo de optimización es <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Scroll_ZKP/status/1621573597566468096">reducir el proving cost</a>, lo que permitirá que más personas ejecuten un <em>prover</em>, descentralizando aún más el sistema. Estamos trabajando conscientemente para evitar el dilema de que &quot;<em>el prover más rápido siempre gana</em>&quot;, de modo que las personas no tengan que depender de costosos hardware personalizados para participar en nuestra red.</p></li><li><p><strong>secuencer descentralizado.</strong> Descentralizar el <em>secuencer</em> es otro paso importante que puede ayudar con la <em>censorship-resistance</em> y estamos comprometidos a trabajar en ello. Tenemos múltiples propuestas internas sobre cómo lograr esto, y pronto haremos públicas estas ideas para una discusión más amplia. Hay muchas razones por las que queremos descentralizar primero el <em>prover</em> (p. ej., preocupaciones sobre <em>bug-free zkEVM</em> y una interacción e incentivos más complicados entre el <em>prover</em> y el <em>secuencer</em>). Estamos pensando a muy largo plazo en cómo alinearnos con Ethereum a nivel de protocolo con respecto a los <em>secuencers.</em></p></li><li><p><strong>desarrollo y gobernabilidad.</strong> El desarrollo de zkEVM se ha realizado de forma descentralizada con una comunidad de <em>open-source contributors</em>. Nos coordinamos con ellos a través de <em>community calls zkEVM y prover.</em> A medida que avancemos, haremos que el desarrollo y la gobernanza sean cada vez más transparentes (incluido el proceso de toma de decisiones de desarrollo, similar a las <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ethereum/pm">calls ACD</a> de Ethereum).</p></li><li><p><strong>ecosistema y comunidad.</strong> Siguiendo la visión de Ethereum de &quot;<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethereum.foundation/infinitegarden">the infinite garden</a>&quot;, queremos apoyar el crecimiento orgánico de nuestro ecosistema y comunidad. Por lo tanto, minimizaremos los <em>&quot;partnerships&quot;</em> con proyectos individuales específicos y, en cambio, nos mantendremos en una posición más neutral para apoyar todos los esfuerzos de base. No estamos pensando en términos de marketing, sino en términos de mensajería y comunicación. Nos preguntamos, “<em>¿Cómo podemos ser más transparentes con nuestra comunidad?</em>” Creemos que este enfoque es la mejor manera de crear un ecosistema más descentralizado y fomentar la creatividad.</p></li><li><p><strong>diversidad social y cultural.</strong> Además de la tecnología y el ecosistema, apuntamos a otro nivel de descentralización a nivel social y cultural. Nuestro equipo está distribuido en varios continentes (Asia, Europa, América del Norte, América del Sur, Australia). Puede encontrar un miembro del equipo de Scroll en casi cualquier parte del mundo, y esto nos permite desarrollar una comunidad distribuida a nivel local. Estamos creciendo con la diversidad cultural para un nivel más profundo de consenso social.</p></li></ul><h3 id="h-no-construye-solo-para-scroll-sino-tambien-para-ethereum" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">No construye sólo para Scroll, sino también para Ethereum</h3><p>Nos mantenemos altamente alineados con Ethereum mientras desarrollamos nuestra <em>scaling solution</em>. Ethereum tiene un objetivo final ambicioso de &quot;<em>todo zk-SNARK</em>&quot;: construir un <em>Ethereum-equivalent zkEVM</em> que se pueda usar para probar bloques de red principal. Imagine que un día, los validadores no necesitan volver a ejecutar un bloque de <em>layer1</em>, sino que solo verifican un <em>succinct zk proof</em>. Imagina que un día puedes probar toda la historia de Ethereum a través de una sola <em>proof</em>. <em>¿No es súper emocionante?</em></p><p>¡Este es exactamente el objetivo del equipo de PSE! Como el co-constructor más grande que desarrolla sobre la misma base de código durante aproximadamente 2 años, estamos avanzando directamente hacia este ambicioso objetivo.</p><p>Se ha propuesto algún estándar para <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://vitalik.ca/general/2022/08/04/zkevm.html">categorizar diferentes tipos de zkEVM</a>. Sin embargo, es más una especificación de alto nivel que describe lo que se debe hacer como resultado final. <strong>Como una de las principales fuerzas que impulsan Ethereum-equivalent zkEVM, queremos proponer algo diferente para distinguir el objetivo y el camino práctico para llegar allí</strong>. Este es el camino que queremos tomar para snark Ethereum:</p><ul><li><p>Implemente un zkEVM compatible con el nivel de <em>bytecode</em> con una <em>sound zk proof</em></p></li><li><p>Trabajar en iniciativas relacionadas para coordinar el desarrollo de la <em>layer 1</em> y zkEVM</p></li><li><p>Alcance un estándar comunitario y proponer EIP para mejorar Ethereum para el <em>end game</em></p></li></ul><p>En este momento, estamos en la primera fase del lanzamiento de un zkEVM compatible con <em>bytecode</em> listo para ser lanzado y nos hemos comprometido a seguir construyendo el futuro de Ethereum con toda la comunidad. Puede llevar años construir un <em>Ethereum-equivalent zkEVM</em>, lo suficientemente seguro y eficaz, lo que implica <em>proof system upgrades</em>, nuevos  <em>circuit designs</em>, así como innovaciones en la aceleración de software y hardware. Pero lo que es más importante, para adoptarlo en la <em>layer 1</em>, Ethereum tiene que hacer algunos cambios. Todas las actualizaciones importantes de Ethereum deben tener en cuenta zkEVM antes de lograr su objetivo final.</p><p>La idea prevaleciente ha sido que la <em>layer 2</em> adapte los cambios unidireccionales para la <em>layer 1</em>. Sin embargo, a medida que maduran los <em>rollups</em>, creemos que este ya no debería ser el caso. Los <em>rollups</em> deben desempeñar un papel en la conducción de cambios en la <em>layer 1</em>, y los equipos de <em>rollups</em> deben desempeñar un papel más importante con respecto a la infraestructura de la <em>layer 1</em> (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.eip4844.com/">4844</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://notes.ethereum.org/@dankrad/new_sharding">Danksharing</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://vitalik.ca/general/2021/06/18/verkle.html">Verkle tree</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://notes.ethereum.org/@domothy/pbs_links">PBS</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethresear.ch/t/multidimensional-eip-1559/11651">Multidimensional fees</a>, etc.). Debemos tener cuidado con las implicaciones de la compatibilidad con versiones anteriores, pero el legado no debe limitar el futuro. Todo el ecosistema debería coordinarse para un mejor Ethereum.</p><h3 id="h-conclusion" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Conclusión</h3><p>Hemos adoptado un enfoque impulsado por la comunidad para desarrollar zkEVM desde el principio, y nos hemos comprometido a seguir construyendo de una forma más colaborativa y a seguir devolviendo a la comunidad. Damos la máxima importancia a la seguridad y la descentralización, y nos estamos centrando en formas específicas de conseguirlas. Con nuestra mentalidad de seguridad, nos fijamos un alto estándar para ser más seguros y estables con cada versión. Con nuestra mentalidad de descentralización, perseguimos la descentralización en todos los niveles, incluida nuestro stack tech, el proceso de desarrollo, el ecosistema, la comunidad y la diversidad social.</p><p>Queremos impulsar al máximo la naturaleza <em>open</em> y <em>censorship-resistant</em> de las blockchains. <strong>Hemos elegido un camino que es único desde el principio. Nos hemos posicionado no sólo para construir una <em>layer 2</em>, sino también para impulsar el ambicioso objetivo de gruñir todo Ethereum. Con nuestra mentalidad, estamos operando como Ethereum, ¡y apuntando al mismo futuro <em>the infinite garden</em>!</strong></p>]]></content:encoded>
            <author>layer2es@newsletter.paragraph.com (L2 en Español)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/0b21e4be6169e4e852fa97f34163df3ce6aba21850f4f7919d56739fc7023749.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Introducción a la Ceremonia KZG ]]></title>
            <link>https://paragraph.com/@layer2es/introducci-n-a-la-ceremonia-kzg</link>
            <guid>JFHRRieMyXDUK3huaOvu</guid>
            <pubDate>Fri, 24 Feb 2023 22:30:53 GMT</pubDate>
            <description><![CDATA[🕯IntroducciónMuchos protocolos y en especial aquellos que manejan datos y ZK-SNARKs dependen de trusted setups, también llamadas ceremonias. Estas ceremonias son un procedimiento que se realiza una vez para generar un dato o datos que luego debe usarse cada vez que se ejecuta algún protocolo. La generación de estos datos requiere cierta información secreta; la "confianza" proviene del hecho de que alguna persona o algún grupo de personas tiene que generar estos secretos, usarlos para generar...]]></description>
            <content:encoded><![CDATA[<h2 id="h-introduccion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🕯Introducción</h2><p>Muchos  protocolos y en especial aquellos que manejan datos y ZK-SNARKs dependen de <strong>trusted setups</strong>, también llamadas <strong>ceremonias</strong>. Estas ceremonias son un procedimiento que se realiza una vez para generar <strong>un dato o datos</strong> que luego debe usarse cada vez que se ejecuta algún protocolo.</p><p>La generación de estos datos requiere cierta información secreta; la &quot;<strong>confianza</strong>&quot; proviene del hecho de que alguna persona o algún grupo de personas tiene que generar estos secretos, usarlos para generar los datos, luego publicar los datos y olvidar los secretos. Pero una vez que se generan los datos y se olvidan los secretos, <strong>no se requiere más participación</strong> de los creadores de la ceremonia. Este tipo de eventos fueron diseñados para poner en marcha las funciones de privacidad de la cadena. Sin embargo, también pueden utilizarse para respaldar mecanismos de escalabilidad, como planea hacer Ethereum.</p><hr><h2 id="h-kzg-commitments" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">📄KZG Commitments</h2><p>Las “KZG commitments” (llamada así por sus creadores <strong>Kate, Zaverucha y Goldberg</strong>) son un <strong>esquema matemático</strong> (sí, criptografía muy avanzada) que permite generar “<strong>pruebas de disponibilidad de datos</strong>” tal y como las pruebas de validez en ZK Rollups para verificar que ciertos datos han sido publicados y están disponibles. A partir de esto, los nodos completos pueden comprobar que los datos de la blockchain están disponibles sin tener que ser descargados completamente, solamente satisfasiendose con una porción aleatoria de datos de un determinado bloque más la prueba KZG generada en dicho momento.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d434670df7f28fcb7ceb3a17ac8f61fd6f02f5ab779e65b1cf79d40d64d340d1.png" alt="Funcionamiento del compromiso KZG" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Funcionamiento del compromiso KZG</figcaption></figure><hr><h2 id="h-importancia-de-proto-danksharding-y-kzg" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">✅Importancia de Proto-Danksharding y KZG</h2><p>Ethereum, en busca de mejorar la escalabilidad de la red, planeó su propia ceremonia, la <strong>KZG ceremony</strong>, con el objetivo de proporcionar una base para una mejor escalabilidad mediante la implementación del <strong>EIP-4844</strong> (también conocido como <strong>proto-danksharding</strong>).</p><p>La principal característica introducida por <strong>proto-danksharding</strong> es un nuevo tipo de transacción, que llamamos <strong>transacción con blob</strong>. Una transacción con blob es como una transacción normal, con la diferencia de que también transporta un fragmento adicional de datos llamado blob. Los blobs son extremadamente grandes (~125 kB), y pueden ser mucho más baratos que cantidades similares de <em>calldata</em>. Sin embargo, los datos blob no son accesibles para la ejecución de la EVM; la EVM sólo puede ver un compromiso con el blob. En consecuencia, la escalabilidad de la red aumenta, porque estos datos <strong>no compiten con el uso de gas de las transacciones Ethereum existentes</strong>.</p><p>Entre los demás <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.eip4844.com/">beneficios</a> que traerá la integración del <strong>proto-danksharding</strong> se tienen:</p><ul><li><p><strong>Futuro de los Rollups:</strong> Los rollups han demostrado ser la única solución de escalado fiable para Ethereum. Los fees de transacción L1 son un obstáculo importante para los nuevos usuarios y aplicaciones. El <strong>proto-danksharding  ayudará a facilitar el paso de todo el ecosistema a los rollups</strong>.</p></li><li><p><strong>Reducción de fees:</strong>  El proto-danksharding  puede <strong>reducir los fees de los rollups</strong> en magnitud y permitir que Ethereum siga siendo competitivo sin sacrificar la descentralización.</p></li><li><p><strong>Compatibilidad futura:</strong> Los blobs se comprometen con KZG: un esquema de compromiso vectorial eficiente. Estos compromisos se utilizan en el mismo andamiaje que la propuesta completa de &quot;<strong>danksharding</strong>&quot;.</p></li><li><p><strong>Beacon Node:</strong> Los blobs se mantienen en los <strong>Beacon Nodes</strong>, no en la <strong>execution layer</strong> (por ejemplo, en prysm, no en geth). Para futuros trabajos de <strong>sharding</strong> sólo requiere cambios en el Beacon Node, permitiendo a la execution layer trabajar en otras iniciativas en paralelo.</p></li><li><p><strong>Uso manejable del disco:</strong> Los blobs son 4096 elementos de 32 bytes cada uno, con un máximo a largo plazo de 16 blobs por bloque. <strong>4096 * 32 bytes * 16 por bloque = 2 MiB por bloque como máximo</strong>. El tope de blobs por bloque puede empezar siendo bajo y crecer a lo largo de varias actualizaciones de la red.</p></li><li><p><strong>Vida corta:</strong> Los blobs <strong>se eliminan después de ~2 semanas</strong>. Disponibles el tiempo suficiente para que todos los actores de una L2 puedan recuperarlos, pero lo suficientemente cortos como para que el uso del disco sea manejable. Esto permite que los blobs tengan <strong>un precio más barato que los CALLDATA</strong>, que se almacenan en el historial para siempre.</p></li></ul><hr><h2 id="h-en-que-consiste-la-ceremonia-kzg" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🔴¿En qué consiste la ceremonia KZG?</h2><p>La ceremonia KZG es un ritual público coordinado <strong>que proporciona la base criptográfica</strong> para las mejoras de escalabilidad de Ethereum, como por ejemplo, el <strong>proto-danksharding</strong>. En esencia el objetivo de este evento es la creación de la estructura principal  que será utilizada para las implementaciones futuras.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/aba6f4a08b12efae895b01622afb12a1624da2590d8da722082e009fd313d179.png" alt="Esquema de Trusted Setup" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Esquema de Trusted Setup</figcaption></figure><hr><h2 id="h-como-participar-en-la-ceremonia-kzg" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">💡¿Cómo participar en la ceremonia KZG?</h2><p>El primer paso es ingresar al link oficial de la ceremonia: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ceremony.ethereum.org/">https://ceremony.ethereum.org/</a></p><p>para poder observar el siguiente interfaz. Para iniciar la contribución a la ceremonia solo es necesario dar <strong>click en empezar</strong>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/388a991fc2005572152253d627afe44efde0b21039c3e9dd093e4c3e5b8f3187.png" alt="Interfaz inicial de la ceremonia KZG" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Interfaz inicial de la ceremonia KZG</figcaption></figure><ol><li><p>Estado actual del Secuenciador.</p></li><li><p>Número total de direcciones que han contribuido a la ceremonia y número total de usuarios en espera para participar.</p></li><li><p>Lista de lenguajes disponibles para el portal.</p></li><li><p>Tiempo restante para participar en la ceremonia.</p></li><li><p>Botón de inicio para la participación.</p></li><li><p><strong>Interfaz IPFS:</strong> Diseñada para aquellos usuarios que desean usar sus builds personalizadas.</p></li><li><p><strong>Otros clientes:</strong> son scripts escritos en diferentes lenguajes tales como rust, go, python, etc; para aquellos usuarios que buscan usar otra web.</p></li><li><p><strong>¡Escriba su propio!:</strong> Ethereum foundation organizó un concurso para que los participantes construyan y sugieran su propio método de recolectar la entropía. Las reglas y criterios para participar los puedes entrar <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://blog.ethereum.org/2022/12/15/kzg-ceremony-grants-round">aquí</a>. (Válido hasta el 15 de Marzo)</p><p>El paso siguiente consiste en la ingresar la <strong>entropía</strong>, <em>el cual es un conjunto de datos aleatorios que se utilizaran para generar la contribución</em> que será implementada por el secuenciador.</p></li></ol><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f3760a7a6bf0545eaee4b144a2cd805749db4b2382bd1ba86699322650357c2f.png" alt="Interfaz de ingreso de entropía" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Interfaz de ingreso de entropía</figcaption></figure><p>En este paso es importante tener en cuenta que además de ingresar un “<strong>secreto</strong>” (cualquier texto) y una “<strong>muestra</strong>” (generada por el navegador de forma aleatoria), es necesario ingresar un “<strong>símbolo</strong>”, el cual será tomado del movimiento del cursor en la interfaz. A medida que se mueva el cursor, la  barra de color verde en forma de serpiente empezará a crecer hasta dar toda la vuelta. Una vez hecho esto podremos avanzar al siguiente paso.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1bfdc26bbda23abf63c233154dcea9920770f1eeedb80252e972910df14bfc8e.png" alt="Interfaz de entropía cargada" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Interfaz de entropía cargada</figcaption></figure><p>Luego de ingresar los datos, se requerirá que el usuario desbloquee con una wallet de ethereum o Github para continuar.</p><p><strong><em>Nota:</em></strong> <strong>Con el fin de evitar sybil attacks, Ethereum Foundation</strong> <strong>puso la condición de que sólo direcciones de Ethereum que haya enviado al menos 4 transacciones antes del 13 de enero de 2023 son elegibles para participar en la ceremonia.</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/937b1b8c1f7e21c95a8a5f174faab04cd471946cd4c70afee94ccabf7d36ac03.png" alt="Interfaz de desbloqueo de Ethereum wallet o Github" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Interfaz de desbloqueo de Ethereum wallet o Github</figcaption></figure><p>Una vez hecho esto, la página solicitará que el usuario firme con la wallet o Github. (en este caso se usará una wallet de ethereum).</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f8d1359cc64903b8f0a06dd5217526a53192c988738d4dafd0a44a2eab1f70a4.png" alt="Interfaz de vinculación de wallet" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Interfaz de vinculación de wallet</figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fb5f9a69eb61543ac418279648c6a6049ed4997af2e5a6abc4e4c3b87f60bfd9.png" alt="Solicitud de firma de wallet" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Solicitud de firma de wallet</figcaption></figure><p>A continuación el portal nos redireccionará a una nueva página, con el objetivo de volver a firmar. Esto se hace así con el objetivo de minimizar el spam y prevenir la presencia de bots.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/592fbaaa0157591166831ce20b4a75768d08d0eed41445cace81e0e2cbada92a.png" alt="Segunda interfaz de solicitud de firma" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Segunda interfaz de solicitud de firma</figcaption></figure><p>En esta nueva página tendremos la posibilidad de usar cualquiera de las wallets que se muestran. Cabe destacar que se debe usar una wallet <strong>que tenga la misma dirección de ethereum</strong> que en la firma anterior.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/283382f5823b431288f7d152295642e5355db270d2faa6151d0e52ca48b471eb.png" alt="Opciones de wallets disponibles para firmar" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Opciones de wallets disponibles para firmar</figcaption></figure><p>Una vez seleccionada la wallet a usar, la wallet pedirá autorización para conectarse al portal.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/efff191e4dd74b078c7ef5d162e60c6815310e2595b32b2faf35ca90f2c50de1.png" alt="Solicitud de conexión a la interfaz" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Solicitud de conexión a la interfaz</figcaption></figure><p>Luego de esto, es tan simple como darle a “<strong>firmar</strong>” para continuar.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1bcc0450ba6ee0cb59fd3ecdc09b5d0ea90d7564661935035ee3bd5ea7f1580b.png" alt="Solicitud de segunda firma anti sybil attack" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Solicitud de segunda firma anti sybil attack</figcaption></figure><p>Una vez completado este paso, el portal nos redireccionará a la interfaz del principio. y nos mostrará el mensaje, “ <strong>ESPERANDO PARA SER ENVIADO</strong>”. En ese momento nuestra contribución está en el lobby para ser tomada por el secuenciador.</p><p>Ahora bien, el secuenciador toma una contribución que está en el lobby de forma aleatoria y la procesa, esto sucede cada hora, por lo que es necesario tener un poco de paciencia (y quizás algo de suerte) para ser seleccionado. El tiempo de espera para esto puede variar en gran medida debido a la aleatoriedad, sin embargo el promedio de tiempo por usuario es de <strong>aproximadamente 4 a 7 días.</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7ec68f5341801e3a77f1da5bc51ef8c395f5eb5dac9589f6330ccf04effbe7c0.png" alt="interfaz de espera" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">interfaz de espera</figcaption></figure><p><strong>Una vez seleccionado será procesada tu contribución y LISTO!</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/06454a47c9de6d121d30da3e63a7e9b2de48b5c274864dddc2c43dd4b14678eb.png" alt="Interfaz de contribución completada" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Interfaz de contribución completada</figcaption></figure><p>La interfaz te dará la oportunidad de compartir tu experiencia en Twitter y Lenster.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7ce52b4f7776f1359455541fd07526347ef7509e748894be54d4c8d0756391a7.png" alt="Al final podrás compartir tu contribución en Twitter y Lenster" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Al final podrás compartir tu contribución en Twitter y Lenster</figcaption></figure><p>De igual forma también podremos ver y descargar los detalles de la contribución tales como las firmas, el ID del participante, etc. Al darle en “<strong>Ver su contribución</strong>”.</p><p>Este archivo descargable es el <em>receipt</em> lo cual certifica que participó en la ceremonia.</p><p><strong>¡Es la prueba irrefutable de que estas formado parte de la historia de Ethereum!</strong></p><p><strong>¡Que no se te olvide guardarlo bien!</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/563857b15be459ebb71585bc4c7dd1f3333af951997e46a1918d524c41199899.png" alt="Receipt que comprueba tu participación en la ceremonia" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Receipt que comprueba tu participación en la ceremonia</figcaption></figure><p><strong><em>Nota: </em></strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hmong.es/wiki/Boneh%E2%80%93Lynn%E2%80%93Shacham"><strong><em>Las firmas BLS</em></strong></a><strong><em> son aquellas es un esquema de firma criptográfica que permite al usuario verificar que un firmante es auténtico . Por otro lado, </em></strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://crypto4dummy.com/que-es-y-como-funciona-el-algoritmo-ecdsa/#:~:text=ECDSA%20(Firma%20Digital%20basada%20en%20Curvas%20El%C3%ADpticas)%20es%20un%20algoritmo,mensaje%20o%20transacci%C3%B3n%20en%20l%C3%ADnea."><strong><em>la firma ECDSA</em></strong></a><strong><em>, es un algoritmo de cifrado de clave pública que, como ya sabemos, se utiliza para generar una firma digital única y verificar la autenticidad de un mensaje o transacción en línea.</em></strong></p><p>Otra forma de validar que participamos es ingresando nuestra dirección usada en la ceremonia en el siguiente link: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ceremony.ethereum.org/#/record">https://ceremony.ethereum.org/#/record</a></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6d5ec9758cc2be3d337da232c4eb3a1154de80c2c8857e8be40440bda4e519ba.png" alt="lista de direcciones que contribuyeron a la ceremonia" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">lista de direcciones que contribuyeron a la ceremonia</figcaption></figure><p><strong>y listo! tu contribución a la ceremonia KZG ha sido completada!</strong></p><hr><h2 id="h-problemas-comunes" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">💥Problemas comunes</h2><h3 id="h-direccion-no-elegible" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">❌Dirección no elegible</h3><p>La ceremonia sólo admite a <strong>aquellas direcciones con un mínimo de 4 transacciones completadas antes del 13 de Enero del 2023</strong>, con el fin de evitar sybil attacks. Al usar una dirección que viole dicha regla aparecerá lo siguiente:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8cb468ae01e955c17e42f09e737ce02d67c557fd1935f933b5d88e6e7487b38e.png" alt="Mensaje de dirección no elegible" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Mensaje de dirección no elegible</figcaption></figure><h3 id="h-participacion-doble" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">👨🏻‍🤝‍👨🏻Participación doble</h3><p>Una vez que una dirección contribuya a la ceremonia <strong>no es posible usarla para participar de nuevo</strong>, sin importar que el secreto o otra entropía sea diferente, al intentarlo saldrá el siguiente mensaje:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/804756a7cf41d2aaa5a245d1ae5837bbfb39bbab1578d5ef94bae918ad31e942.png" alt="Mensaje de participación doble" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Mensaje de participación doble</figcaption></figure><p>Una vez que se acabe el tiempo del contador, todas las direcciones que participaron <strong>recibirán un POAP conmemorativo</strong> probando así, que son parte de la historia de Ethereum para siempre!</p><hr><p>💯Agradecemos profundamente a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/NicoSerranoP">Nico</a>, por su guía y conocimiento para la elaboración de este artículo.</p><p>Que curioso que la descentralización sea capaz de unir a tanta gente bonita.</p><hr><p>🎉 ¡Gracias por leer hasta el final! En L2 en Español estamos avocados en educar, aprender y estudiar juntos, sigue nuestras redes sociales y unete a la conversación en nuestra comunidad de Telegram!</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/l2espaniol">https://t.me/l2espaniol</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Layer2es">https://twitter.com/Layer2es</a></p>]]></content:encoded>
            <author>layer2es@newsletter.paragraph.com (L2 en Español)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/cf15ad82ff96609fa09e9cb6fb2e2fccdcb4207c36bb4242c0d8abdf960244e1.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Profundizando en el ecosistema STARKs]]></title>
            <link>https://paragraph.com/@layer2es/profundizando-en-el-ecosistema-starks</link>
            <guid>g5ONMkjpWw9VnejKG3Z4</guid>
            <pubDate>Fri, 17 Feb 2023 10:48:29 GMT</pubDate>
            <description><![CDATA[11 Líneas de investigación en la que la tecnología STARK está sentando las bases del ecosistema del futuro🌐 #1 - Starknet Prover será Open SourceHola comunidad 👋 Hoy queremos presentarles StarkWare, una compañía innovadora en el mundo de Ethereum. StarkWare es el desarrollador de soluciones de escalado de capa 2 populares como StarkEx y StarkNet, y ha anunciado recientemente que el software STARK Prover será de código abierto para la comunidad. Estos y otros avances recientes están transfor...]]></description>
            <content:encoded><![CDATA[<p><em>11 Líneas de investigación en la que la tecnología STARK está sentando las bases del ecosistema del futuro</em></p><h3 id="h-1-starknet-prover-sera-open-source" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🌐 #1 - Starknet Prover será Open Source</h3><p>Hola comunidad 👋</p><p>Hoy queremos presentarles <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://starkware.co/">StarkWare</a>, una compañía innovadora en el mundo de Ethereum. StarkWare es el desarrollador de soluciones de escalado de capa 2 populares como <strong>StarkEx</strong> y <strong>StarkNet</strong>, y ha anunciado recientemente que el software STARK Prover será de código abierto para la comunidad. Estos y otros avances recientes están transformando el panorama de las soluciones de escalado de capa 2, en este documento, analizaremos estos cambios y también discutiremos si la definición actual de estas soluciones se queda corta.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/StarkWareLtd/status/1622197933025251328">https://twitter.com/StarkWareLtd/status/1622197933025251328</a></p><p>La tecnología <strong>ZK-Rollup</strong> de StarkWare es una solución de escalado de capa 2 que ayuda a la plataforma Ethereum a lograr transacciones más rápidas y económicas. Al agrupar cientos de miles de transacciones fuera de la cadena y verificarlas en la cadena por solo una fracción del costo, StarkWare está impulsando el crecimiento y la adopción de Ethereum.</p><p>Además, con el cambio de nombre de <strong>STARK Prover</strong> a <strong>Starknet Prover</strong> y su colocación bajo una licencia <strong>Apache 2.0</strong>, StarkWare está aumentando su compromiso con la comunidad de desarrolladores de Web3. Al permitir que los desarrolladores copien, modifiquen y distribuyan comercialmente el código fuente, la compañía está fomentando la colaboración y la innovación en el sector de la tecnología blockchain. Este movimiento es un paso importante para lograr una participación más amplia y significativa de la comunidad en el desarrollo del ecosistema.</p><blockquote><p><em>&quot;Este es un momento histórico para escalar Ethereum y, en un sentido más amplio, para la criptografía”</em></p></blockquote><blockquote><p><em>&quot;Esto pondrá a la tecnología STARK en el lugar que le corresponde, como un bien público que se utilizará para beneficiar a todos”</em></p></blockquote><p>Esto fue lo que comentó el presidente de StarkWare y cofundador de <strong><em>Eli Ben-Sasson</em></strong> durante un evento en Tel Aviv &quot;<em>StarkWare Session 2023</em>&quot;, en el que se hablaron de temas importantes que profundizaremos en este artículo y haremos que vuestra visión vaya mas lejos, intentando acercarnos a la de su cofundador con StarWare y STARK.</p><p>Así que acompáñanos en este viaje para conocer mejor el ecosistema de StarkWare y que está haciendo que sus STARK o Validity Proof estén mejorando la escalabilidad de Ethereum, aprendamos que es StarkEx y cómo funciona.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fe7ca5771cd9c14075d0790fc18b449377265b032c7bcbd9d7e952bf26ec2d90.jpg" alt="Ecosistema StarkNet" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Ecosistema StarkNet</figcaption></figure><h3 id="h-2-el-motor-starkex" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">⚙️ #2 - El motor StarkEx</h3><p>StarkWare ha desarrollado StarkEx, un revolucionario motor de escalabilidad de capa 2 para la cadena de bloques Ethereum, este motor ha sido diseñado con el objetivo de mejorar de manera significativa la escalabilidad de la cadena de bloques Ethereum. Con StarkEx, se pueden realizar transacciones ultrarrápidas con tarifas de gas extremadamente bajas, sin sacrificar la seguridad, privacidad ni la autocustodia de los fondos.</p><p>Para lograr esta combinación única, StarkEx se basa en un sistema criptográfico avanzado llamado <strong>Validity Proof</strong>. Este sistema permite verificar la validez de las transacciones en tiempo real, ofreciendo una solución escalable y segura para las transacciones en la cadena de bloques Ethereum.</p><p>La validez prueba las transacciones por lotes fuera de la cadena, mientras valida la legitimidad de las transacciones a través de un contrato inteligente en Ethereum Mainnet. Además de aumentar el rendimiento, la tarifa de gas se divide entre todas las transacciones en el mismo lote, lo que da como resultado tarifas de gas más bajas para todas las aplicaciones que utilizan StarkEx.</p><p>La esencia de StarkEx radica en su división eficiente del trabajo entre dos componentes clave: <strong>el probador STARK</strong> fuera de la cadena y <strong>el verificador</strong> en la cadena. Este proceso se divide en cuatro etapas simples:</p><ol><li><p><strong>Procesamiento por lotes:</strong> todas las transacciones se procesan juntas en lotes.</p></li><li><p><strong>Validación y actualización:</strong> las transacciones se validan y se actualizan el estado de la cadena de bloques.</p></li><li><p><strong>Generación de una prueba:</strong> se genera una prueba que verifica la integridad de las transacciones.</p></li><li><p><strong>Verificación en cadena:</strong> la prueba se verifica dentro de la cadena para garantizar la integridad de las transacciones.</p></li></ol><p>Además, StarkEx ofrece privacidad y seguridad para las transacciones gracias a su criptografía segura poscuántica. Esto significa que la integridad de las transacciones en StarkEx está protegida contra posibles ataques de computadoras cuánticas, que en el futuro podrían tener la capacidad de vulnerar algoritmos criptográficos tradicionales.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/40c7a53f7a3d705017e750f9eb217152151fdde7b1a5058bd1a53857ceb81290.png" alt="Funcionamiento del motor StarkEx" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Funcionamiento del motor StarkEx</figcaption></figure><p>La flexibilidad de StarkEx también será un punto a su favor, con la implementación e integración listas para usar de StarkEx a través de una API REST simple, las aplicaciones listas para producción se pueden lanzar en Mainnet en solo unas pocas semanas y gracias a Cairo, el expresivo lenguaje de programación ZKP de Starkware, hay más flexibilidad para agregar características adicionales a la lógica específica de StarkEx.</p><p>La última versión lanzada de StarkEx, la <strong>v4.5.1</strong>, incluye la compatibilidad con los tokens ERC-1155, estos tokens pueden ser almacenados de manera segura y eficiente tanto en bóvedas L1 como L2. StarkEx permite a los usuarios almacenar datos de acuerdo con una variedad de necesidades y aplicaciones, proporcionando flexibilidad y eficiencia.</p><ul><li><p><strong>ZK</strong>-<strong>Rollup</strong>: los datos se publican en la cadena.</p></li><li><p><strong>Validium</strong>: los datos se almacenan fuera de la cadena.</p></li><li><p><strong>Volition</strong> es un modo de disponibilidad de datos híbrido, en el que el usuario puede elegir si colocar los datos dentro o fuera de la cadena.</p></li></ul><h3 id="h-3-starkex-en-algunas-soluciones" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🔩 #3 - StarkEx en algunas soluciones</h3><p>Exploraremos cuatro soluciones diferentes que son evaluadas por <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://l2beat.com/scaling/tvl">L2Beat</a> y utilizan el motor StarkEx:</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.immutable.com/">InmutableX:</a> es una solución de escalado de capa 2 para NFT en la cadena de bloques de Ethereum. En su misión de potenciar la próxima generación de juegos Web3, Immutable aprovecha StarkEx para brindar a los usuarios una jugabilidad fluida, velocidades de transacción ultrarrápidas y acuñación y comercio de NFT sin gas y totalmente neutral en carbono.</p><blockquote><p><em>StarEx ha impulsado más de $361 millones en volumen de operaciones de NFT desde en volumen de negociación de NFT de 155 millones de transacciones en todo el ecosistema ImmutableX, incluidos los juegos y mercados Web3 como Gods Unchained, Guild of Guardians y GameStop Marketplace.</em></p></blockquote></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://sorare.com/">Sorare:</a> es un juego de deportes de fantasía basado en la cadena de bloques Ethereum que permite a los jugadores recolectar, intercambiar y administrar un equipo virtual de tarjetas de jugador digitales NFT.</p><blockquote><p><em>Según el arquitecto de cadena de bloques de Sorare, Pierre Duperrin, la integración de Sorare con StarkEx finalmente permitió a Sorare irrumpir en la corriente principal, al tiempo que le ahorró a la empresa cerca de $ 1 millón por semana. Desde su lanzamiento en julio de 2021, StarkEx ha impulsado un volumen de negociación de más de $790 millones en casi 16 millones de transacciones en la plataforma Sorare.</em></p></blockquote></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dydx.exchange/">dYdX:</a> es un intercambio de finanzas descentralizadas (DeFi) sin custodia que ofrece opciones de comercio perpetuas para más de 35 criptomonedas principales. Decidido a brindar la mejor experiencia comercial posible, dYdX implementó StarkEx para brindar a los usuarios tarifas comerciales más bajas y tamaños mínimos comerciales, operaciones con márgenes cruzados, liquidación comercial instantánea y, lo que es más importante, autocustodia de todos los activos.</p><blockquote><p><em>“Las transacciones se envían en cadena en ZK-Rollup, lo que reduce la cantidad de gas requerida por transacción. Podemos transferir esos ahorros a los comerciantes en forma de tarifas comerciales reducidas en todos los ámbitos”, dijo el fundador y director ejecutivo de dYdX, Antonio Juliano.</em></p></blockquote></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://apex.exchange/">ApeX Pro:</a> es una plataforma de operaciones sin custodia que ofrece operaciones ilimitadas de contratos perpetuos con márgenes cruzados. ApeX Pro tiene la intención de resolver los puntos débiles de (1) acceso global limitado, (2) desempeño comercial insatisfactorio y (3) seguridad y protección de privacidad insuficientes, con una solución simple pero dinámica, &quot;<em>comercio social impulsado por una red descentralizada y sin permisos.</em>&quot;</p><blockquote><p><em>&quot;La sincronización del motor de escalabilidad de capa 2 de StarkWare, StarkEx con ApeX Pro, permite realizar transacciones de contratos perpetuos aceleradas y más baratas, al mismo tiempo que ofrece liquidez comprobada, profundidad de mercado y transparencia a los comerciantes”.</em></p></blockquote></li></ul><p><strong>ApeX Pro</strong> está aprovechando las pruebas criptográficas de <strong>StarkEx</strong> y <strong>Validium</strong> para validar de forma segura los lotes de transacciones. La disponibilidad e integridad de los datos en cadena se puede garantizar con las pruebas <strong>STARK</strong> de StarkWare, que ayudará a salvaguardar un protocolo totalmente sin custodia. Construida sobre la red Ethereum, esta arquitectura de capa 2 publica pruebas ZK directamente en los contratos inteligentes de Ethereum para su verificación. Las transacciones también se empaquetan de manera única para publicar en la cadena para los comerciantes preocupados por la privacidad de los datos, ya que solo se harán visibles los cargos por saldo.</p><h3 id="h-4-fases-de-starknet-y-cairo-10" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">📝 #4 - Fases de Starknet y Cairo 1.0</h3><p>Ahora que hemos explorado el funcionamiento del motor de StarkEx y adquirido un mayor conocimiento de Starknet, es hora de analizar el poderoso lenguaje de programación, su nuevo <strong>Cairo 1.0-Alpha.2.</strong></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Starknet/status/1618896699430256645">https://twitter.com/Starknet/status/1618896699430256645</a></p><p>Cairo se introdujo por primera vez en 2020 como un lenguaje de programación completo de Turing para escribir de manera eficiente programas demostrables con STARK. <strong>Cairo 1.0</strong> es un lenguaje de alto nivel <strong>similar a Rust</strong>, al igual que Rust, está destinado a permitir que los desarrolladores escriban fácilmente código que sea eficiente y seguro.</p><p>Uno de los cambios más significativos en Cairo 1.0 es la sintaxis, se han inspirado en Rust para crear un lenguaje más amigable para los desarrolladores que sea más fácil de leer y escribir, la nueva versión de Cairo permite escribir código más seguro, además de ser más expresivo.</p><p>Cairo 1.0 también presenta <strong>Sierra</strong>, una nueva representación intermedia que garantiza que todas las ejecuciones de Cairo puedan probarse, esto hace que Cairo 1.0 sea especialmente adecuado para su uso en una red sin permisos como StarkNet, donde puede proporcionar una sólida protección DoS y resistencia a la censura.</p><p>La próxima versión testnet de StarkNet, la <strong>Alpha V0.11.0</strong>, prevista para el <strong>primer trimestre de 2023</strong>, presentará la capacidad de implementar y ejecutar contratos utilizando el nuevo lenguaje de programación <strong>Cairo 1.0</strong>. La actualización marcará el comienzo del período de transición hacia un sistema que ejecuta solo contratos de Cairo 1.0, este Período de Transición terminará con la <strong>Regénesis</strong>, que se espera unos meses más tarde.</p><p>El objetivo de StarkNet es escalar exponencialmente Ethereum utilizando la integridad matemática de STARK, y el objetivo de Cairo es hacer que esta escala exponencial sea accesible para los desarrolladores. Accesibilidad significa un lenguaje de programación que sea eficiente, fácil de leer y escribir y seguro de usar.</p><p>Ahora que StarkNet ha alcanzado un alto nivel de usabilidad, es importante examinar sus principales prioridades y comprender las fases en las que se ha basado su desarrollo:</p><ul><li><p><strong>1ª FASE:</strong> funcionalidad y usabilidad</p></li><li><p><strong>2ª FASE:</strong> escalabilidad y rendimiento</p></li><li><p><strong>3ª FASE:</strong> descentralización</p></li></ul><h3 id="h-5-descentralizacion-con-papyrus" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🌍 #5 - Descentralización con Papyrus</h3><p>El lanzamiento de <strong>Starknet Prover</strong> y su disponibilidad de código abierto representan un hito importante en el avance de Starknet hacia su tercera fase de desarrollo. Como parte integral de la descentralización, también es necesario destacar a <strong>Papyrus</strong>, un nodo completo de Starknet disponible de manera abierta. Juntos, estos lanzamientos marcan un progreso significativo hacia un futuro más descentralizado para Starknet.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/StarkWareLtd/status/1613154088866160641">https://twitter.com/StarkWareLtd/status/1613154088866160641</a></p><p><strong>Papyrus</strong> será un componente clave de la infraestructura descentralizada de StarkNet, proporcionará las bases para el nuevo <strong>StarkNet Sequencer</strong>, que mejorará drásticamente el rendimiento de StarkNet, ayudará a mejorar el rendimiento y la descentralización. Papyrus se une a otros nodos completos de StarkNet como <strong>Pathfinder y Juno</strong>, que son responsables de sincronizar y mantener el estado de StarkNet.</p><p>En línea con el movimiento continuo hacia el código abierto de la pila StarkNet, Papyrus es de código abierto bajo la licencia <strong>Apache 2.0</strong>. StarkNet ha logrado una excelente usabilidad, y ahora el rendimiento del sistema es la principal prioridad, con la descentralización cobrando fuerza.</p><p>La mejora del rendimiento del sistema se está abordando mejorando el rendimiento del secuenciador, que es responsable de la producción de bloques de StarkNet, el secuenciador es la &quot;máquina&quot; que ordena y ejecuta transacciones después de que se envían.</p><p><strong>Papyrus</strong> proporcionará al StarkNet Sequencer una capa de almacenamiento eficiente, lo que ayudará a mejorar el rendimiento. En primer lugar, esto significa que el secuenciador mantendrá una base de datos local en lugar de una base de datos basada en la nube, además, Papyrus almacenará un almacenamiento de clave/valor plano, lo que significa que interactuará directamente con el estado, en lugar de llegar a él a través de las rutas de Merkle Patricia.</p><p>Actualmente, hay dos equipos que están desarrollando un nodo completo de StarkNet:</p><ul><li><p><strong>Pathfinder de Equilibrium:</strong> implementado en Rust.b</p></li><li><p><strong>Juno de Nethermind:</strong> están trabajando en la primera versión oficial de su implementación de Golang.</p></li></ul><p>Papyrus se une a esta combinación saludable y fomenta la descentralización y la redundancia, agregar otro nodo completo y hacerlo de código abierto ayuda a proporcionar la variedad de implementaciones del cliente, lo cual es un indicador importante de la fortaleza de una red descentralizada, fijémonos en la arquitectura de Starknet y como el acople de Papyrus con Juno y Pathfinder refuerza la tercera fase.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b3528a9a39a5307910ea4302aaf3adaadecf5a8b2a4ef02aee03b501acf7df6a.png" alt="Arquitectura de Starknet, añada Papyrus como Full Node" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Arquitectura de Starknet, añada Papyrus como Full Node</figcaption></figure><h3 id="h-6-herodotus" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">📓 #6 - Herodotus</h3><p>Es importante tener en cuenta cómo las nuevas tecnologías subyacentes de StarkNet están surgiendo para facilitar la comunicación entre diferentes capas con <strong>STARK</strong>. Un ejemplo de esto es <strong>Herodotus</strong>, que utiliza pruebas de almacenamiento para demostrar que el nonce de una cuenta no ha sido modificado durante un período de tiempo determinado. Esta información puede ser utilizada como un desencadenante para permitir que los familiares accedan y administren la cuenta</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/HerodotusDev/status/1614172762108751874">https://twitter.com/HerodotusDev/status/1614172762108751874</a></p><p><strong>Herodotus</strong> se enfoca en brindar contratos inteligentes con acceso en tiempo real a datos en la cadena que provienen de otras capas de Ethereum. Para lograr esto, combina pruebas de almacenamiento con <strong>zk STARK</strong>, lo que permite acceder a datos transversales entre las capas de Ethereum y hacer que los contratos se implementen de manera autoconsciente.</p><p>La tecnología Herodotus ofrece una solución innovadora que permite a los desarrolladores crear contratos que pueden leer el estado L1 en L2, el estado L2 en L1 y el estado L2 en L2 de manera totalmente sincrónica, lo que elimina la necesidad de enviar mensajes asíncronos de un lado a otro.</p><p>Herodotus aprovecha el hecho de que las cadenas de bloques con estado como Ethereum o Starknet confirman y almacenan su estado de forma criptográfica, mediante el uso de estructuras de datos dedicadas como son:</p><ul><li><p><strong>Merkle Patricia Trees</strong></p></li><li><p><strong>Merkle Trees</strong></p></li><li><p><strong>Verkle Trees</strong></p></li></ul><p>La propiedad común de estos es la capacidad de probar la inclusión de cualquier dato guardado en la estructura de datos, estos datos pueden ser, por ejemplo: almacenamiento de contratos inteligentes, saldos de cuentas, nonces de cuenta, registros de transacciones...</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5c50ebc67d9e9f6acea07de0b5367570240a20741a32c7f53196f9eaa2a78cf2.jpg" alt="Casos de uso de Storage Proof" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Casos de uso de Storage Proof</figcaption></figure><p>Probar cualquiera de ellos es posible dada la raíz de un árbol, Herodotus se asegura de que dichas raíces estén disponibles en cada red compatible con su infraestructura, puede aprovechar acumuladores criptográficos como Merkle Mountain Ranges y pruebas zk recursivas para comprimir datos de blockchain.</p><h3 id="h-7-zkevm-polygon-y-zkevm-kakarot" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🤖 #7 - zkEVM Polygon y zkEVM Kakarot</h3><p>Ahora que vemos como este tipo de pruebas pueden aportar la verificación de una forma matemática efectiva, nos enfocaremos como estas <strong>pruebas</strong> también se incorporan en algunas <strong>zkEVM</strong>, en este caso en <strong>Kakarot</strong>, una máquina virtual de Ethereum escrita en Cairo que se puede implementar en StarkNet y ejecutar cualquier programa de código de bytes EVM, por lo tanto, Kakarot se puede usar para ejecutar contratos inteligentes de Ethereum en StarkNet. Kakarot con <strong>Cairo 1.0</strong> se convertirá en un Super Saiyajin, más potente, más rápido, más fuerte y más seguro.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/KakarotZkEvm/status/1620513080131338245">https://twitter.com/KakarotZkEvm/status/1620513080131338245</a></p><p>Kakarot es un competidor de la tecnología <strong>zkEVM de Polygon</strong>, que emplea un enfoque de prueba de transacciones fuera de la cadena combinando <strong>STARK</strong> y <strong>SNARK</strong> como generadores de pruebas. El zkProver está compuesto por máquinas de estado (Principal y Secundario) y constructores de pruebas zk.</p><ul><li><p><strong>Máquina de estado principal:</strong> maneja la ejecución del bytecode EVM que son interpretados por el lenguaje zkASM. También establece las restricciones polinómicas que deben cumplirse para que las transacciones por lotes sean consideradas válidas.</p></li><li><p><strong>Máquina de estado secundaria:</strong> no es un subcomponente, es una colección de varios ejecutores para una máquina de estado secundaria individual.</p></li><li><p><strong>Generador de pruebas STARK:</strong> se utiliza para demostrar que los lotes satisfacen las restricciones polinómicas.</p></li><li><p><strong>Creador de pruebas SNARK:</strong> se utiliza para probar la corrección de las pruebas STARK y para publicar las pruebas de validez.</p></li></ul><h3 id="h-8-winterfell" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">❄️#8 - Winterfell</h3><p>Exploremos <strong>Winterfell</strong>, una herramienta de verificación y generación de pruebas de <strong>STARK</strong> de &quot;propósito general&quot; escrita en Rust. Al ser de propósito general, Winterfell es capaz de generar pruebas de CI para cualquier cálculo que se pueda describir con un lenguaje completo de Turing, permitiendo la verificación de una amplia variedad de programas. La foto de la repo inferior de <strong>Facebook</strong> &quot;META&quot; muestra hasta dónde han llegado estas pruebas matemáticas de validez de STARK.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3fbe5aadd9821b7b87977b6215afda702a617fc006147b0d4f2ffaa52f77249f.jpg" alt="Github: https://github.com/facebook/winterfell" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Github: https://github.com/facebook/winterfell</figcaption></figure><p>Winterfell utiliza STARK que a diferencia de muchos otros sistemas de prueba, los STARK son totalmente transparentes, esto significa que no necesitan realizar complicadas ceremonias de configuración confiables para comenzar a usar STARK. Las configuraciones confiables son una debilidad de seguridad potencial en otros protocolos de conocimiento cero, porque una configuración confiable comprometida permite a los atacantes generar pruebas de CI falsas. &quot;Los STARK son inmunes a esto&quot;.</p><p>En comparación con otros sistemas, la generación de pruebas STARK es extremadamente rápida cuando se trata de cálculos uniformes o cálculos con estructuras regulares. Afortunadamente, la gran mayoría de los programas que la gente escribe poseen tales estructuras regulares, además, casi todos los pasos del proceso de generación de prueba STARK son masivamente paralelizables. Por lo tanto, con frecuencia podemos acelerar la generación de pruebas distribuyéndolas entre más y más núcleos de CPU.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/0xPolygon/status/1460609725477703693">https://twitter.com/0xPolygon/status/1460609725477703693</a></p><p>Ninguna de las propiedades individuales nombradas anteriormente son exclusiva de STARK, sin embargo, ningún otro sistema de prueba combina criptografía ajustada, transparencia y rendimiento en la medida en que lo hacen los STARK. Winterfell aprovecha al máximo estos beneficios mientras abstrae la mayor parte de la complejidad. Por ejemplo, la generación de pruebas se puede distribuir en varios núcleos de CPU para reducir drásticamente el tiempo de generación de pruebas. Además, cuentan con planes para permitir la generación de pruebas totalmente distribuidas en varias máquinas.</p><h3 id="h-9-polygon-miden-con-stark" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">♾️ #9 - Polygon Miden con STARK</h3><p>Tanto <strong>Distaff VM</strong> como <strong>Winterfell</strong> son piezas fundamentales de <strong>Polygon Miden</strong>, si, el Winterfell nombrado de Facebook unos párrafos más arriba. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://polygon.technology/blog/polygon-announces-polygon-miden-a-stark-based-ethereum-compatible-rollup">Polygon Miden</a> es un ZK-Rollup de propósito general basado en <strong>STARK</strong>, pero antes un poco de historia.</p><p>En 2019 se desarrolló GenSTARK, un probador basado en STARK que podía generar pruebas para cualquier tipo de cálculo, el problema con esta herramienta era que no era muy compatible con los desarrolladores, por lo que querían encontrar una forma de solucionarlo.</p><p>Empezaron a pensar más en una máquina virtual basada en STARK y en cómo sería posible hacer algo como esto, esto culminó con la edición de un artículo llamado: &quot;Un boceto para una VM basada en STARK&quot;, en febrero de 2020, y solo un par de años después, decidieran construir su propia VM STARK utilizando las ideas de este artículo, esto condujo al desarrollo de Distaff VM en abril de 2020, que terminó siendo una pieza fundamental para el proyecto actual de Miden.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/acea067291d3aa38ad2441aa5d7fbda44955c69a3a5ff9695e2bc04ebdb11931.png" alt="Zk-VM Polygon Miden" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Zk-VM Polygon Miden</figcaption></figure><p><strong>Distaff VM</strong> es una máquina virtual de conocimiento cero.</p><p>Cada vez que se ejecuta un programa dentro de un zk-VM, se genera una prueba de ejecución de zk para verificar que el programa se ejecutó correctamente, sin tener que ejecutarlo realmente. Hay dos métodos en los que se puede probar el conocimiento aquí, ya sea usando una prueba SNARK o una prueba STARK, aunque Distaff es una máquina virtual basada en STARK.</p><p>Según su página de github:</p><blockquote><p><em>“Para cualquier programa ejecutado en Distaff VM, se genera automáticamente una prueba de ejecución basada en STARK. Esta prueba puede ser utilizada por cualquier persona para verificar que un programa se ejecutó correctamente sin necesidad de volver a ejecutar el programa o incluso saber cuál era el programa”.</em></p></blockquote><p>Lo que hace Miden VM es tomar esta Distaff VM y agregarle un sistema de prueba más eficiente, Winterfell. Un año después de liderar el desarrollo de Winterfell, Bobbin ayudo al desarrollo de Polygon Miden.</p><p><em>&quot;Winterfell es un probador y verificador STARK de subprocesos múltiples y completamente funcional para cálculos arbitrarios&quot;.</em> - esencialmente una versión mucho más eficaz y actualizada de GenSTARK.</p><p>El equipo de Polygon Miden analizó sus pruebas con la ayuda de <strong>RISC Zero</strong> y <strong>DelendumV</strong>. Medir el rendimiento en diferentes sistemas ZKP <strong>es muy difícil</strong>, el propósito del <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://delendum.xyz/2023/01/11/zk-system-benchmarking.html">proyecto de evaluación</a> es producir una colección de evaluaciones comparativas estándar para comparar el rendimiento de diferentes bibliotecas de prueba de conocimiento cero, midiendo el tiempo de prueba en varios entornos de hardware estándar, lo que permite que cada sistema de prueba muestre su comportamiento en el mundo real cuando se ejecuta en sistemas comúnmente disponibles.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/0xPolygonMiden/status/1613635088746696705">https://twitter.com/0xPolygonMiden/status/1613635088746696705</a></p><h3 id="h-10-risc-zero" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🔲 #10 - RISC Zero</h3><p>Podemos ver cómo este tipo de pruebas en arquitecturas se está expandiendo más allá de Starknet y Cairo. <strong>RISC Zero</strong> es una plataforma informática general verificable de conocimiento cero que utiliza <strong>zk STARK</strong> y la microarquitectura <strong>RISC-V</strong>, que es una arquitectura de CPU basada en un Conjunto de Instrucciones Reducido con una licencia de código abierto.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/RiscZero/status/1542970508651614209">https://twitter.com/RiscZero/status/1542970508651614209</a></p><p>Como hemos aprendido una prueba de conocimiento cero permite que una parte (el probador) convenza a otra parte (el verificador) de que algo es cierto sin revelar todos los detalles. En el caso de RISC Zero, el probador puede mostrar que ejecutó correctamente algún código (conocido por ambas partes), mientras que solo revela al verificador la salida del código, no cualquiera de sus entradas o cualquier estado durante la ejecución.</p><p>El <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://manasilvora.medium.com/joining-risc-zero-unleashing-the-power-of-zk-3a0df869a003">zkVM de RISC Zero</a> es una máquina virtual especial que emula una pequeña computadora RISC-V. Esta máquina virtual permitirá a los desarrolladores generar ZKP de alto rendimiento para una amplia variedad de aplicaciones escritas en lenguajes como Rust, C++, Solidity, Go y más.</p><h3 id="h-11-zerosync" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">⛓️🔒#11 - ZeroSync</h3><p>Por último, pero no menos importante, vemos cómo StarkWare y STARK llegan aún mas lejos, este tipo de pruebas se pueden añadir en otro tipo de plataformas o capas muy diferentes y, también pueden servir para verificar el estado de la cadena de Bitcoin en un instante, como es el caso de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zerosync.org/">ZeroSync</a>. No es necesario descargar cientos de gigabytes de bloques, una prueba criptográfica compacta es suficiente para validar todo el historial de transacciones y los saldos actuales de todos. <strong>¡No confíes Verifica!</strong></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/lucidLuckylee/status/1611855016465207299">https://twitter.com/lucidLuckylee/status/1611855016465207299</a></p><p>La primera versión en pruebas es la aplicación Zerosync de Bitcoin Core en modo podado, la visión a largo plazo de ZeroSync es convertirse en una caja de herramientas para pruebas personalizadas de Bitcoin. Las pruebas de STARK le permiten transformar los datos de la cadena de bloques, mejorarlos, filtrarlos, indexarlos para consultas eficientes y optimizarlos para su caso de uso individual.</p><p>Al implementar las reglas en Cairo, podemos crear un programa que valide un solo bloque y pueda generar una prueba para él si, y solo si, la validación fue exitosa, hacen uso de un probador de código abierto para Cairo llamado Giza para probar el programa generado y su seguimiento de ejecución. Debido al protocolo STARK subyacente, es inviable falsificar una prueba de ejecución que certifique la validación correcta del encabezado del bloque, una prueba correcta tiene un tamaño de unos pocos cientos de kilobytes y se puede verificar en otras cadenas de bloques, fuera de la cadena (por ejemplo, para la sincronización de nodos) o incluso en otra prueba STARK.</p><p>Para generar una prueba para múltiples encabezados de bloque sucesivos, podemos agrupar su validación en un solo programa Cairo, siempre que la máquina probadora subyacente tenga suficiente poder de procesamiento. Se puede crear una prueba para toda la cadena de Bitcoin mediante la verificación de varias pruebas de validación por lotes en una nueva prueba STARK, haciendo uso de las llamadas <strong>pruebas recursivas.</strong></p><p>Puede usar el verificador Giza STARK en WebAssembly para verificar una prueba de la cadena Bitcoin en su navegador. Hasta ahora, han generado pruebas solo para los primeros miles de bloques, en pruebas, valida solo un bloque y falsifica la validación de la cadena anterior. Todavía están trabajando en la recursividad de prueba para el probador de Giza, la <strong>recursividad se trata de validar un STARK en un STARK</strong>, esto les permitiría ampliar gradualmente la prueba de cadena anterior con una siguiente prueba de bloque.</p><p>Es posible verificar la cadena de bloques de Bitcoin en su navegador utilizando el verificador Giza STARK en WebAssembly. Aunque actualmente solo se han generado pruebas para los primeros miles de bloques, estas pruebas permiten validar un solo bloque mientras falsifican la validación de la cadena anterior. Sin embargo, el equipo de desarrollo está trabajando en implementar la recursividad de prueba en el probador de Giza, lo que permitirá validar un STARK dentro de otro STARK y, de esta manera, ampliar gradualmente la prueba de la cadena anterior con cada nuevo bloque validado.</p><h2 id="h-agradecimientos" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🫂 Agradecimientos</h2><p>🎉 ¡Gracias por leer hasta el final! Si está interesado en continuar aprendiendo y colaborando con nosotros, le invitamos a unirse a la vibrante comunidad de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/l2espaniol">Telegram L2 en Español</a> y a seguirnos en nuestro <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Layer2es">Twitter L2 en Español</a>. Allí encontrará una gran cantidad de información sobre Layer 2 y el ecosistema de Blockchain en general.¡Te Esperamos!</p>]]></content:encoded>
            <author>layer2es@newsletter.paragraph.com (L2 en Español)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/18a5a438def1bd5dfd93e2bdba52827f84018fde2913010d8bf84336bc263f62.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Newsletter #2 — L2 en Español]]></title>
            <link>https://paragraph.com/@layer2es/newsletter-2-l2-en-espa-ol</link>
            <guid>y1P9S0IvUeTdDNDUAJiX</guid>
            <pubDate>Wed, 15 Feb 2023 22:31:45 GMT</pubDate>
            <description><![CDATA[👋 Hola a todos! Bienvenidos a la Newsletter #2 de L2 en español para la comunidad.👨‍💻Arbitrum permite que los devs utilicen otros lenguajes de programación a través de la iniciativa StylusArbitrum lanzó la iniciativa StylusA menudo, los desarrolladores consideran que la inclusión de nuevos lenguajes de programación es beneficiosa para la industria cripto en la creación de contratos inteligentes. Sin embargo, esto a menudo requiere el uso de nuevas redes con diferentes niveles de seguridad ...]]></description>
            <content:encoded><![CDATA[<p>👋 Hola a todos! Bienvenidos a la Newsletter #2 de L2 en español para la comunidad.</p><hr><h2 id="h-arbitrum-permite-que-los-devs-utilicen-otros-lenguajes-de-programacion-a-traves-de-la-iniciativa-stylus" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">👨‍💻Arbitrum permite que los devs utilicen otros lenguajes de programación a través de la iniciativa Stylus</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/47743c072699ff75ac0999e34561143e3f8cf3ec131ca738cb306b45a4590914.png" alt="Arbitrum lanzó la iniciativa Stylus" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Arbitrum lanzó la iniciativa Stylus</figcaption></figure><p>A menudo, los desarrolladores consideran que la inclusión de nuevos lenguajes de programación es beneficiosa para la industria cripto en la creación de contratos inteligentes. Sin embargo, esto a menudo requiere el uso de nuevas redes con diferentes niveles de seguridad y descentralización. Offchain Labs, la empresa detrás de Arbitrum, la red de capa 2 para Ethereum, está trabajando actualmente para abordar esta limitación.</p><p>La empresa que lanzó Arbitrum en 2021, presentó al público Stylus, una iniciativa diseñada para permitir a los desarrolladores desplegar programas escritos en lenguajes de programación populares como C, C++ y Rust, para Arbitrum One y Arbitrum Nova.</p><p>A través del poder de los WebAssembly smart contracts, los usuarios podrán implementar programas escritos en sus lenguajes de programación favoritos para ejecutarlos junto con los contratos existentes en la EVM en Arbitrum. Es más de un orden de magnitud más rápido, reduce drásticamente los fees y es totalmente interoperable con la VM de Ethereum.</p><p>Entre los beneficios que Stylus introducirá tendremos:</p><h3 id="h-dapps-mas-veloces-con-fees-mas-bajos" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🚀Dapps más veloces con fees más bajos</h3><p>Las Dapps de Arbitrum escritas en lenguajes como Rust son más de un orden de magnitud más rápidas que sus homólogas de Solidity y Vyper, debido a esto Offchain Labs espera que la velocidad de cómputo mejore x10. Asimismo, Stylus reduce drásticamente los fees, lo que permite una nueva era del high-compute blockchain applications en una amplia gama de campos.</p><p>La combinación de estas características con los beneficios de ahorro de costes de datos de Arbitrum Nova resulta en una herramienta poderosa. DeFi, DAOs y otros casos de uso podrán aprovechar las mismas eficiencias en Arbitrum One, ya que Stylus está completamente integrado en ambas cadenas.</p><h3 id="h-nuevo-horizontes" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🏖Nuevo horizontes</h3><p>Una computación barata conlleva la libertad de escribir programas potentes y más sofisticados, por lo que la comunidad de Ethereum siempre está trabajando para acelerar la EVM. Esto incluye la adición ocasional de smart contracts especiales, conocidos como precompiles, que realizan de forma eficiente tareas específicas como el cálculo de hashes. Con Stylus, los usuarios podrán crear sus propios precompiles.</p><p>Prepárate para la EVM+...</p><hr><h2 id="h-regenesis-en-la-testnet-zksync-20" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">👶Regenesis en la testnet zkSync 2.0</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e46ba4c35493c4b079bd8d04d511664da4c9bfa3a0ba932879969e65844c5515.png" alt="zkSync hizó una regenesis que solo tendra impacto en la zkSync 2.0" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">zkSync hizó una regenesis que solo tendra impacto en la zkSync 2.0</figcaption></figure><p>Con el objetivo de preparar el Fair Onboarding Alpha, el equipo de Matter Labs a cargo de zkSync 2.0 realizó una regenesis con el fin de restablecer el historial de transacciones y saldo de tokens, lo cual obligará a los teams a volver a desplegar sus contratos. Esta regenesis sólo tendrá impacto en la zkSync 2.0 testnet y no en zkSync 1.0.</p><p>La regenesis planea implementar varios cambios importantes, incluyendo:</p><ul><li><p>Abstracción de cuentas/paymaster</p></li><li><p>SDKs</p></li><li><p>Contratos L1</p></li></ul><hr><h2 id="h-optimism-distribuyo-su-airdrop-2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">💸Optimism distribuyó su airdrop #2</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e53c065da4c7b921b7ae29f872d01b6376001b749d71f1bf5e793121b9a92217.png" alt="https://optimism.mirror.xyz/lPZEkFF7LU2ZlrO-dsV3p_LtWQUaknFGfxFMgSz3vGA" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">https://optimism.mirror.xyz/lPZEkFF7LU2ZlrO-dsV3p_LtWQUaknFGfxFMgSz3vGA</figcaption></figure><p>Optimism ha realizado un <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/OptimismESP/status/1623830204094287872">airdrop de 11,7 M de OP</a> los cuales fueron distribuidos a más de 300 mil direcciones únicas para recompensar la participación en la gobernanza de suma positiva y a los usuarios activos de la Optimism Mainnet.</p><p>El airdrop no necesitó ser claimeado, fue automáticamente distribuido a las direcciones elegibles, de acuerdo al artículo publicado los criterios que se usaron para seleccionar a los recompesandos fueron:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1206db7045b2c868d3d29266bb2178284a8d28327381f55b2fcacd5b2434a1fb.png" alt="Criterios tomados para el airdrop OP #2" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Criterios tomados para el airdrop OP #2</figcaption></figure><hr><h2 id="h-scroll-y-polygon-zkevm-revelan-mejoras-en-su-infraestructura-zk" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🛠Scroll y Polygon zkEVM revelan mejoras en su infraestructura ZK</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0fad39ae6024814ea470b70d909d9331e31e0c0383f9b3e0ea0b15fcdfe5f8b3.png" alt="Scroll y Polygon zkEVM mejoran su arquitectura ZK" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Scroll y Polygon zkEVM mejoran su arquitectura ZK</figcaption></figure><p>Scroll ha anunciado a través de su twitter que ha realizado varias mejoras la arquitectura ZK del protocolo logrando reducir los requisitos de memoria del prover de 870 GB a 275 GB, lo que supone una mejora de casi el 68%. El equipo de Scroll ha expresado que logrando que los requisitos del sistema sean lo más bajos posibles permite democratizar la red descentralizada de provers, un paso clave para que las Layer 2 de este tipo no solo puedan brindar un entorno escalable sino que participar en el mantenimiento de la red sea más accesible en pro del liveness y resiliencia.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Scroll_ZKP/status/1621573597566468096">https://twitter.com/Scroll_ZKP/status/1621573597566468096</a></p><p>Por otro lado, Polygon zkEVM también ha mostrado resultados interesantes sobre sus mejoras asociadas al tiempo de operación, en donde se consiguió un generar una prueba ZK de un batch de 500 transacciones en 2:30 minutos. Con esto, Polygon zkEVM asegura que su tecnología ZK es “la más rápida” y por ende “la primera zkEVM lista para producción”.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/eduadiez/status/1623723409115938820">https://twitter.com/eduadiez/status/1623723409115938820</a></p><p>Todas estas noticias han demostrado cómo los equipos tras los ZK Rollups en desarrollo han estado consiguiendo avances significativos para hacer realidad lo que antes parecía un sueño casi imposible de realizar. En el mediano plazo veremos cómo más proyectos optimizarán aún más estas propiedades de costes y performance junto a los diseños de infraestructura y participación, que impactarán positivamente en la experiencia final de los usuarios y la seguridad efectiva de la red.</p><hr><h2 id="h-polygon-labs-anuncia-el-lanzamiento-de-la-mainnet-beta-polygon-zkevm-el-27-de-marzo" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🐱‍🏍Polygon Labs anuncia el lanzamiento de la mainnet beta Polygon zkEVM el 27 de Marzo</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/66aee4ff31b923365049567c0a025f2f515f2626fe4becb9b9ba17a3cd1c262e.png" alt="Polygon Labs anunció el lanzamiento de la mainnet beta zkEVM para el 27 de Marzo" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Polygon Labs anunció el lanzamiento de la mainnet beta zkEVM para el 27 de Marzo</figcaption></figure><p>Polygon Labs ha <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/0xPolygon/status/1625529122561597440?s=20&amp;t=o4IAcqUrtKfNDEsYrna0jg">anunciado oficialmente</a> el lanzamiento de la mainnet beta de la zkEVM para el 27 de Marzo.</p><p>Esta nueva mainnet viene como resultado de un arduo año de trabajo y pruebas realizadas en la versión testnet, Polygon zkEVM ha sido probado en batalla a través del uso real de testnet y también a través de un proceso exhaustivo de auditoría.</p><p>Polygon zkEVM <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://beta.polygon.technology/blog/to-ethereum-with-love-announcing-polygon-zkevm-mainnet-beta-on-march-27th">se presenta</a> como el estándar para la equivalencia de la EVM, ya que superó el 100 % de los vectores de prueba de Ethereum que se aplican a un zkEVM. <strong>Los developers pueden copiar y pegar el código que funciona en Ethereum y usarlo para construir en Polygon zkEVM sin tener que cambiar nada</strong>; todas las herramientas de Ethereum funcionan a la perfección con Polygon zkEVM. En pocas palabras, frictionless scaling.</p><p>En términos de rendimiento, <strong>Polygon zkEVM no se ve afectada por el bien de la equivalencia de EVM</strong>. De hecho, cada vez <strong>es más barato y rápido de usar</strong>. Los tiempos de prueba para un lote de cientos de transacciones se acercan rápidamente a los dos minutos, y se espera un mayor rendimiento en el futuro cercano. Es importante tener en cuenta que los tiempos de prueba dictan la latencia, no la escalabilidad, porque Polygon zkEVM puede generar pruebas en paralelo, lo que permite un alto rendimiento con transacciones que se establecen en L1 en solo unos minutos.</p><p>Los costos de prueba para un lote de transacciones similarmente grande <strong>se redujeron a alrededor de $0.06 (menos de $ 0.001 para una transferencia simple)</strong>, lo que convierte a Polygon zkEVM en una forma transparente, segura y asequible de acceder a todo lo que al que le guste Ethereum.</p><h2 id="h-taiko-prepara-el-escenario-para-la-testnet-alpha-2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🥁Taiko prepara el escenario para la testnet alpha 2</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f7e16d5426f240eeb73859260e73eec16a4f3714e8f782d9331f19eb590cdb4e.png" alt="Taiko alpha-1 dejara de funcionar para dar paso a el alpha-2" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Taiko alpha-1 dejara de funcionar para dar paso a el alpha-2</figcaption></figure><p>El Zk-rollup, Taiko, ha anunciado que su testnet Taiko alpha-1 (también llamada Snæfellsjökull) dejará de funcionar el 15 de febrero aproximadamente a las 14:00 UTC. Después de esta fecha, los proposers no podrán proponer bloques, los developers y usuarios no podrán realizar transacciones en la red.</p><p>El equipo de Taiko planea enfocar sus esfuerzos en la testnet alpha-2 tras la desaparición de la testnet actual. La versión alpha-2 presenta componentes y participantes importantes que no estaban presentes en la versión anterior. Según el plan, Taiko planea lanzar la testnet alpha-2 aproximadamente un mes después de eliminar la alpha-1.</p><hr><h2 id="h-discusiones-interesantes-en-twitter-y-alphas" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">📳Discusiones interesantes en Twitter y Alphas</h2><h3 id="h-sobre-la-terminologia-zk-rollups-vs-validity-rollups" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">📚Sobre la terminología ZK Rollups vs. Validity Rollups</h3><p>Hace mucho tiempo se ha discutido sobre cuál es el término correcto para nombrar a los rollups asegurados por pruebas de validez. Recientemente uno de los chicos de Bankless levantó este debate afirmando que “ZK no tiene nada que ver” con este tipo de rollups:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/TrustlessState/status/1622958806169948161">https://twitter.com/TrustlessState/status/1622958806169948161</a></p><p>A lo que enseguida destacó el comentario de arnau.eth, miembro del equipo de desarrolladores de Polygon zkEVM respondió que no era preciso del todo:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/arnau_eth/status/1622992498770472964">https://twitter.com/arnau_eth/status/1622992498770472964</a></p><p>Tal y como lo dice el tweet, es importante aclarar que aunque la mayoría de los rollups asegurados por pruebas de validez no implementan privacidad en sus sistemas (a excepción de Aztec), utilizan la base criptográfica zero-knowledge para otros fines. Aunque la implementación de los protocolos de privacidad y escalabilidad son distintos, comparten ciertos o muchos aspectos matemáticos criptográficos en la categoría de zero-knowledge, lo que no invalida una a la otra.</p><h3 id="h-metis-implementando-zk" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">🌿¿Metis implementando ZK?</h3><p>En otros tweets, la cuenta de Metis reveló públicamente la intención de uso de ZK para su proyecto:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/MetisDAO/status/1621149839189753859">https://twitter.com/MetisDAO/status/1621149839189753859</a></p><p>Aunque el tweet en sí mismo no provee detalles de ello, desde el chat de DeFi LATAM, Jose Fabregas parte del equipo de Metis especificó que se usaría para recortar la ventana de tiempo de retiros en su solución optimista:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f33d43fbc25ed9349dc6d782aede236e0fcec05d7bfbfda8ee49229b3ff5d94b.png" alt="Discusión en Defilatam" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Discusión en Defilatam</figcaption></figure><p>Este tipo de intenciones demuestra el potencial de esta tecnología y cómo una solución optimista puede apalancarse de implementaciones del tipo ZK para mejorar la experiencia de usuario e incluso la seguridad de rollup en sí mismo.</p><hr><h2 id="h-actualizaciones-e-integraciones" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🔗Actualizaciones e integraciones</h2><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Uniswap">@Uniswap</a> anunció la integración de Uniswap V3 en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/bobanetwork">@BobaNetwork</a>. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Uniswap/status/1621521617464745990">Check!</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Starknet">@Starknet</a> y <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/chainlink">Chainlink Labs</a> se asocian para acelerar la adopción de Starknet. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://starkware.medium.com/starknet-joins-chainlink-labs-in-developer-partnership-to-accelerate-starknet-adoption-84cc9c754c9">Check!</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/POKTnetwork">@POKTnetwork</a> ha añadido soporte para la red <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/arbitrum">@arbitrum</a>.<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/POKTnetwork/status/1622677337824264192">Check!</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/aztecnetwork">@aztecnetwork</a> integra a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/LiquityProtocol">@LiquityProtocol</a> con el objetivo de ofrecer un mejor servicio de borrowing. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/aztecnetwork/status/1623864378767601664">Check!</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Unicrowio">@Unicrowio</a> se ha desplegado con éxito en la red de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/arbitrum">@arbitrum</a>. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Unicrowio/status/1622610374649430016">Check!</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/SiloFinance">@SiloFinance</a> ha sido lanzado en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/arbitrum">@arbitrum</a>. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/SiloFinance/status/1623013513953439745">Check!</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/StarkscanCo">@StarkscanCo</a> se integró junto a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Starknet_id">@Starknet_id</a> con el fin de realizar mejoras para que Starkscan sea una experiencia fluida. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/StarkscanCo/status/1623709846313877504">Check!</a></p></li></ul><hr><h2 id="h-eventos-que-no-te-podes-perder" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">✨Eventos que no te podés perder</h2><h3 id="h-starware-sessions-2023" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">⭐Starware Sessions 2023</h3><div data-type="youtube" videoId="6wLzFXbSqQU">
      <div class="youtube-player" data-id="6wLzFXbSqQU" style="background-image: url('https://i.ytimg.com/vi/6wLzFXbSqQU/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=6wLzFXbSqQU">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><h3 id="h-workshop-de-developer-dao-con-fuel-labs" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">👷‍♂️Workshop de Developer DAO con Fuel Labs</h3><div data-type="youtube" videoId="8FHrJTCZfH8">
      <div class="youtube-player" data-id="8FHrJTCZfH8" style="background-image: url('https://i.ytimg.com/vi/8FHrJTCZfH8/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=8FHrJTCZfH8">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><hr><p>📌<strong>Por último</strong>, no olvides leer nuestro último trabajo de investigación hecho por <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/0xJoxes">@0xJoxes</a> titulado <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/noJq2MCXm5eXE89suReVRFtRPURRMK8M4ygxDuAF_Fo">“Desmascarando la desinformación: ¿Shibarium es una Layer 2?”</a> , el cual busca determinar la verdadera naturaleza de Shibarium.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/layer2es.eth/noJq2MCXm5eXE89suReVRFtRPURRMK8M4ygxDuAF_Fo">https://mirror.xyz/layer2es.eth/noJq2MCXm5eXE89suReVRFtRPURRMK8M4ygxDuAF_Fo</a></p><hr><p>🎉 ¡Gracias por leer hasta el final! En L2 en Español estamos avocados en educar, aprender y estudiar juntos, sigue nuestras redes sociales y unete a la conversación en nuestra comunidad de Telegram!</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/l2espaniol">https://t.me/l2espaniol</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Layer2es">https://twitter.com/Layer2es</a></p>]]></content:encoded>
            <author>layer2es@newsletter.paragraph.com (L2 en Español)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/03eae4e789bd773d9c024484621299a1b1ee7ff711ac0a7ad6b43289bcd00ea4.png" length="0" type="image/png"/>
        </item>
    </channel>
</rss>