Optimism 技術文書

Por Optimism Collective · 2021

Optimism no cuenta con un whitepaper tradicional. Como rollup optimista de Capa 2 (Layer 2) de Ethereum, su diseño y especificaciones están documentados a través de documentación técnica, la especificación del OP Stack y publicaciones de investigación, en lugar de un único artículo académico formal.

Resumen

El documento aborda el problema de la escalabilidad en blockchains descentralizados analizando la compensación entre el rendimiento de las transacciones y los requisitos de hardware para ejecutar un nodo. Los rollups, es decir, tecnologías para la verificación en cadena de bloques ejecutados fuera de la cadena, se presentan en forma de pruebas de falla o validez. Comparamos los rollups optimistas y los rollups de validez con respecto al tiempo de retiro, los costos de transacción, las técnicas de optimización y la compatibilidad con el ecosistema Ethereum. Nuestro análisis revela que Optimism Bedrock tiene actualmente una tasa de compresión de gas de aproximadamente 20:1, mientras que StarkNet logra una tasa de compresión del costo de escritura de almacenamiento de alrededor de 24:1. También analizamos técnicas para optimizar aún más estas tasas, como el uso de contratos de caché y filtros Bloom. En última instancia, nuestras conclusiones resaltan las compensaciones entre complejidad y agilidad en la elección entre Optimistic y Validity Rollups. Palabras clave Blockchain, Escalabilidad, Rollup 1. Introducción La tecnología Blockchain ha ganado una atención significativa debido a su potencial para revolucionar diversas industrias. Sin embargo, la escalabilidad sigue siendo un desafío importante, ya que la mayoría de los blockchain__ se enfrentan a un equilibrio entre escalabilidad, descentralización y seguridad, comúnmente conocido como el trilema de la escalabilidad [1, 2]. Para aumentar el rendimiento de un blockchain, una solución trivial es aumentar el tamaño de su bloque. En el contexto de Ethereum, esto significa aumentar la cantidad máxima de gas que puede contener un bloque. Como cada nodo completo debe validar cada transacción de cada bloque, a medida que aumenta el rendimiento, también aumentan los requisitos de hardware, lo que lleva a una mayor centralización de la red. Algunos blockchains, como Bitcoin y Ethereum, optimizan su diseño para maximizar su descentralización arquitectónica, mientras que otros, como Binance Smart Chain y Solana, están diseñados para ser lo más rápidos y económicos posible. Las redes descentralizadas limitan artificialmente el rendimiento del blockchain para reducir los requisitos de hardware para participar en la red. A lo largo de los años, se han realizado intentos para encontrar una solución al Trilema, como los canales estatales [3] y Plasma [4, 5]. Estas soluciones tienen la característica de mover alguna actividad fuera de la cadena, vincular la actividad dentro de la cadena con la actividad fuera de la cadena usando smart contracts y verificar DLT 2023: 5to Taller de tecnología de contabilidad distribuida, 25 y 26 de mayo de 2023, Bolonia, Italia $ [email protected] (L. Donno) https://lucadonnoh.github.io/ (L. Donno) 0000-0001-9221-3529 (L. Donno) © 2023 Copyright de este artículo por parte de sus autores. Uso permitido bajo la Licencia Creative Commons Attribution 4.0 International (CC BY 4.0). Actas del taller CEUR http://ceur-ws.org ISSN 1613-0073 Actas del taller CEUR (CEUR-WS.org) dentro de la cadena, qué está sucediendo fuera de la cadena. Sin embargo, tanto los canales Plasma como los estatales tienen un soporte limitado para los smart contracts generales. Los rollups son blockchains (llamados Layer 2 o L2) que publican sus bloques en otro blockchain (Layer 1 o L1) y por lo tanto heredan sus propiedades de consenso, disponibilidad de datos y seguridad. A diferencia de otras soluciones, admiten el cálculo arbitrario. Los rollups tienen tres componentes principales: • Secuenciadores: nodos que reciben transacciones Rollup de los usuarios y las combinan en un bloque que se envía a Layer 1. El bloque consta de al menos la raíz del estado (por ejemplo, una raíz de Merkle) y los datos necesarios para reconstruir y validar el estado. El Layer 1 define el...

概要

この論文では、トランザクション スループットとノードを実行するためのハードウェア要件との間のトレードオフを分析することで、分散型 blockchain のスケーラビリティの問題に対処しています。ロールアップ、つまりオフチェーンで実行されるブロックをオンチェーンで検証するテクノロジーは、障害証明または有効性証明の形式で提供されます。出金時間、取引コスト、最適化手法、Ethereum エコシステムとの互換性に関して、オプティミスティック ロールアップと有効性ロールアップを比較します。私たちの分析により、Optimism Bedrock の現在のガス圧縮率は約 20:1 であるのに対し、StarkNet は約 24:1 のストレージ書き込みコスト圧縮率を達成していることがわかりました。また、キャッシュ コントラクトやブルーム フィルターの使用など、これらのレートをさらに最適化する手法についても説明します。最終的に、私たちの結論は、楽観的ロールアップと妥当性ロールアップの選択における複雑さと機敏性の間のトレードオフを浮き彫りにします。キーワード ブロックチェーン、スケーラビリティ、ロールアップ 1. はじめに ブロックチェーン技術は、さまざまな業界に革命を起こす可能性があるため、大きな注目を集めています。ただし、ほとんどの blockchain は、一般にスケーラビリティのトリレンマと呼ばれる、スケーラビリティ、分散化、セキュリティの間のトレードオフに直面しているため、スケーラビリティは依然として大きな課題です。 blockchain のスループットを向上させる簡単な解決策は、ブロック サイズを増やすことです。 Ethereum のコンテキストでは、これはブロックが保持できるガスの最大量を増やすことを意味します。各フルノードはすべてのブロックのすべてのトランザクションを検証する必要があるため、スループットが増加するにつれてハードウェア要件も増加し、ネットワークの集中化が進みます。 Bitcoin や Ethereum などの一部の blockchain は、アーキテクチャの分散化を最大化するために設計を最適化しますが、Binance Smart Chain や Solana などの他のものは、可能な限り高速かつ安価になるように設計されています。分散型ネットワークは、blockchain のスループットを人為的に制限して、ネットワークに参加するためのハードウェア要件を下げます。長年にわたり、状態チャネル [3] やプラズマ [4、5] など、トリレンマの解決策を見つける試みが行われてきました。これらのソリューションには、一部のアクティビティをオフチェーンに移動し、smart contracts を使用してオンチェーンのアクティビティをオフチェーンのアクティビティにリンクし、DLT 2023 を検証するという特徴があります: 第 5 回分散台帳技術ワークショップ、2023 年 5 月 25 ~ 26 日、イタリア、ボローニャ $ [email protected] (L. Donno) https://lucadonnoh.github.io/ (L. Donno) 0000-0001-9221-3529 (L. Donno) © 2023 この論文の著作権は著者にあります。クリエイティブ コモンズ ライセンス表示 4.0 インターナショナル (CC BY 4.0) に基づいて使用が許可されています。 CEUR ワークショップ議事録 http://ceur-ws.org ISSN 1613-0073 CEUR ワークショップ議事録 (CEUR-WS.org) オンチェーンとオフチェーンで何が起こっているか。ただし、プラズマ チャネルと状態チャネルの両方は、一般的な smart contract のサポートに制限があります。ロールアップは、ブロックを別の blockchain (Layer 1 または L1) に公開する blockchain (Layer 2 または L2 と呼ばれます) であり、そのため、そのコンセンサス、データの可用性、およびセキュリティのプロパティを継承します。他のソリューションとは異なり、これらは任意の計算をサポートします。ロールアップには 3 つの主なコンポーネントがあります。 • シーケンサー: ユーザーからロールアップ トランザクションを受け取り、それらを Layer 1 に送信されるブロックに結合するノード。ブロックは、少なくとも状態ルート (マークル ルートなど) と、状態を再構築して検証するために必要なデータで構成されます。 Layer 1 は...を定義します。

Introducción

  1. Introducción La tecnología Blockchain ha ganado mucha atención debido a su potencial para revolucionar diversas industrias. Sin embargo, la escalabilidad sigue siendo un desafío importante, ya que la mayoría de los blockchains enfrentan un equilibrio entre escalabilidad, descentralización y seguridad, comúnmente conocido como el Trilema de escalabilidad [1, 2]. Para aumentar el rendimiento de un blockchain, una solución trivial es para aumentar el tamaño de su bloque. En el contexto de Ethereum, esto significa aumentar el máximo cantidad de gas que puede contener un bloque. Como cada nodo completo debe validar cada transacción de cada bloque, a medida que aumenta el rendimiento, los requisitos de hardware también aumentan, lo que lleva a una mayor centralización de la red. Algunos blockchains, como Bitcoin y Ethereum, optimizan su diseño para maximizar su descentralización arquitectónica, mientras que otros, como Binance Smart Chain y Solana, están diseñados para ser lo más rápidos y económicos posible. Redes descentralizadas limitar artificialmente el rendimiento del blockchain para reducir los requisitos de hardware a participar en la red. A lo largo de los años, se ha intentado encontrar una solución al Trilema, como por ejemplo la canales [3] y Plasma [4, 5]. Estas soluciones tienen la característica de mover alguna actividad fuera de la cadena, vinculando la actividad dentro de la cadena con la actividad fuera de la cadena usando smart contracts y verificando DLT 2023: 5.º taller sobre tecnología de contabilidad distribuida, 25 y 26 de mayo de 2023, Bolonia, Italia $ [email protected] (L.Donno) https://lucadonnoh.github.io/ (L.Donno) 0000-0001-9221-3529 (L.Donno) © 2023 Copyright de este artículo por parte de sus autores. Uso permitido bajo la Licencia Creative Commons Attribution 4.0 International (CC BY 4.0). EUR Taller Procedimientos http://ceur-ws.org ISSN 1613-0073 Actas del taller CEUR (CEUR-WS.org)dentro de la cadena lo que está sucediendo fuera de la cadena. Sin embargo, tanto los canales de plasma como los estatales están limitados en su apoyo al general smart contracts. Los rollups son blockchains (llamados Layer 2 o L2) que publican sus bloques en otro blockchain (Layer 1 o L1) y por lo tanto hereda sus propiedades de consenso, disponibilidad de datos y seguridad. Ellos, a diferencia de otras soluciones, admite cálculo arbitrario. Los rollups tienen tres componentes principales: • Secuenciadores: nodos que reciben transacciones acumuladas de los usuarios y las combinan en un bloque que se envía a Layer 1. El bloque consta de al menos la raíz del estado (por ejemplo, un Merkle root) y los datos necesarios para reconstruir y validar el estado. El Layer 1 define el canónico blockchain de la L2 estableciendo el ordenamiento de los datos publicados. • Nodos Rollup completos: nodos que obtienen, procesan y validan bloques Rollup de Layer. 1 verificando que la raíz sea correcta. Si un bloque contiene transacciones no válidas, entonces es descartados, lo que evita que los secuenciadores creen bloques válidos que incluyan bloques no válidos. transacciones. • Nodos ligeros de resumen: nodos que obtienen bloques de resumen de Layer 1 pero no calculan el nuevo Estado ellos mismos. Verifican que el nuevo estado raíz sea válido mediante técnicas como pruebas de error o validez. Los rollups logran escalabilidad al disminuir el costo amortizado de las transacciones a medida que aumenta el número. de usuarios aumenta. Esto se debe a que el costo de garantizar la validez de blockchain crece de manera sublineal. con respecto al costo de verificar las transacciones individualmente. Los rollups difieren según el mecanismo por el cual aseguran la validez de la ejecución de transacciones en los nodos ligeros: en Los Rollups Optimistas están garantizados por un modelo económico y por pruebas de fallos, mientras que en Validez Los rollups se aseguran criptográficamente mediante pruebas de validez. Los nodos ligeros se pueden implementar como smart contracts en Layer 1. Aceptan la raíz de la nuevo estado y verificar la validez o las pruebas de fallas: estos Rollup se denominan por lo tanto Smart Contract Acumulados. Si los nodos ligeros son independientes, se denominan Sovereign Rollups [6]. La ventaja de Usar un Smart Contract Rollup es poder construir un puente de confianza minimizada entre los dos. blockchains: dado que se prueba la validez del estado L2 para L1, se crea un sistema de transacciones desde Se pueden implementar L2 a L1, permitiendo retiros. La desventaja es que el costo del Las transacciones dependen del costo de verificar el estado en L1: si la capa base está saturada por otras actividades, el costo de las transacciones en el Rollup también aumenta. Las capas de datos y consenso son las que determinan la seguridad del sistema como Definen el orden de las transacciones, previenen ataques y ponen a disposición datos para probar el estado. validez. Contribución en papel En este artículo, estudiamos Optimistic y Validity Rollups, dos innovadores soluciones al Trilema de escalabilidad, con un enfoque en implementaciones notables, como Optimism Bedrock y StarkNet. Nuestras contribuciones incluyen una comparación exhaustiva de estos soluciones, un análisis de los tiempos de retiro y una discusión de un posible ataque a Optimism Base rocosa. Además, calculamos sus relaciones de compresión de gas, proporcionamos optimizaciones específicas de la aplicación y presentamos las ventajas y desventajas de alejarnos del Ethereum. Máquina virtual (EVM).

Estructura del papel El documento está organizado de la siguiente manera. En la sección 2 se muestran los resúmenes optimistas. introducido analizando Optimism Bedrock. En la sección 3, los acumuladores de validez se introducen por analizando StarkNet. En la sección 4 comparamos las dos soluciones. Finalmente, en la sección 5 dibujamos algunas conclusiones.

導入

  1. はじめに ブロックチェーン技術は革命を起こす可能性があるため大きな注目を集めています さまざまな業界。ただし、ほとんどの blockchain が直面しているように、スケーラビリティは依然として大きな課題です。 スケーラビリティ、分散化、セキュリティの間のトレードオフ。一般に スケーラビリティのトリレンマ [1、2]。 blockchain のスループットを向上させるための簡単な解決策は次のとおりです。 ブロックサイズを大きくします。 Ethereum のコンテキストでは、これは最大値を増やすことを意味します。 ブロックが保持できるガスの量。各フルノードはすべてのトランザクションを検証する必要があるため、 ブロックのスループットが増加すると、ハードウェア要件も増加し、 ネットワークの一元化。 Bitcoin や Ethereum などの一部の blockchain は、 アーキテクチャの分散化を最大限に高めるように設計されている一方で、Binance Smart などの他の製品は Chain と Solana は、できるだけ速く、そして安価になるように設計されています。分散型ネットワーク blockchain のスループットを人為的に制限して、ハードウェア要件を下げる ネットワークに参加します。 長年にわたり、トリレンマの解決策を見つける試みがなされてきました。 チャネル [3] およびプラズマ [4、5]。これらのソリューションには、何らかのアクティビティを移動するという特徴があります。 オフチェーン、smart contracts を使用してオンチェーン アクティビティをオフチェーン アクティビティにリンクし、検証する DLT 2023: 第 5 回分散台帳テクノロジー ワークショップ、2023 年 5 月 25 ~ 26 日、イタリア、ボローニャ $ [email protected] (L. ドノ) https://lucadonnoh.github.io/ (L. ドノ) 0000-0001-9221-3529 (L. ドンノ) © 2023 この論文の著作権は著者にあります。クリエイティブ コモンズ ライセンス表示 4.0 インターナショナル (CC BY 4.0) に基づいて使用が許可されています。 クール ワークショップ 議事録 http://ceur-ws.org ISSN 1613-0073 CEUR ワークショップ議事録 (CEUR-WS.org)オフチェーンで起こっていることをオンチェーンで。ただし、プラズマ チャネルと状態チャネルの両方が制限されています。 一般的な smart contract のサポート。 ロールアップは、別の blockchain でブロックを公開する blockchain (Layer 2 または L2 と呼ばれます) です。 (Layer 1 または L1) なので、そのコンセンサス、データの可用性、およびセキュリティのプロパティを継承します。彼らは、 他のソリューションとは異なり、任意の計算をサポートします。ロールアップには 3 つの主要なコンポーネントがあります。 • シーケンサー: ユーザーからロールアップ トランザクションを受け取り、それらを結合してトランザクションを作成するノード。 Layer 1 に送信されるブロック。ブロックは少なくとも状態ルート (マークルなど) で構成されます。 root) と、状態を再構築して検証するために必要なデータ。 Layer 1 は、 公開されたデータの順序を確立することにより、L2 の正規 blockchain を取得します。 • ロールアップフルノード: レイヤーからロールアップブロックを取得、処理、検証するノード 1 ルートが正しいことを確認します。ブロックに無効なトランザクションが含まれている場合、 破棄され、シーケンサーが無効なブロックを含む有効なブロックを作成できなくなります。 取引。 • ロールアップ ライト ノード: Layer 1 からロールアップ ブロックを取得しますが、計算は行わないノード 新しい状態そのもの。彼らは、新しい状態のルートが有効であることを技術を使用して検証します。 欠陥証明や有効性証明など。 ロールアップは、トランザクションの償却コストを数値として削減することでスケーラビリティを実現します。 ユーザー数が増加します。これは、blockchain の有効性を確保するコストが非線形的に増加するためです。 取引を個別に検証するコストに関して。ロールアップは次のように異なります。 ライトノードでのトランザクション実行の正当性を保証するメカニズム: 楽観的なロールアップは、有効期間中、経済モデルとフォールトプルーフによって保証されます。 ロールアップは、有効性証明を使用して暗号的に保証されます。 ライト ノードは、Layer 1 上の smart contract として実装できます。彼らはその根を受け入れます 新しい状態を確認し、有効性または障害の証明を検証します。したがって、これらのロールアップはスマート コントラクトと呼ばれます。 ロールアップ。ライト ノードが独立している場合、それらはソブリン ロールアップ [6] と呼ばれます。の利点 スマート コントラクト ロールアップを使用すると、両者の間に信頼を最小限に抑えたブリッジを構築できるようになります。 blockchains: L2 状態の正当性が L1 に証明されたため、L1 からのトランザクションのシステムが L2からL1まで実装可能で引き出しも可能です。デメリットとしては、費用がかかることです トランザクションは、L1 の状態を検証するコストに依存します。ベース層が飽和している場合、 他のアクティビティに伴い、ロールアップのトランザクションのコストも増加します。 データ層とコンセンサス層は、システムのセキュリティを決定するものです。 トランザクションの順序を定義し、攻撃を防ぎ、状態を証明するためにデータを利用できるようにします。 有効性。 論文寄稿 このペーパーでは、2 つの革新的なオプティミスティック ロールアップと妥当性ロールアップについて研究します。 Optimism Bedrock や StarkNet などの注目すべき実装に焦点を当てた、スケーラビリティのトリレンマに対するソリューション。私たちの貢献には、これらの包括的な比較が含まれます 解決策、引き出し時間の分析、Optimism に対する攻撃の可能性についての議論 岩盤。さらに、ガス圧縮比を計算し、アプリケーション固有の最適化を提供し、Ethereum からの移行の長所と短所を示します。 仮想マシン (EVM)。

紙の構造 論文は以下のように構成されている。セクション 2 では、楽観的なロールアップについて説明します。 Optimism 岩盤を分析することで導入されました。セクション 3 では、有効性ロールアップが導入されています。 StarkNet を分析しています。セクション 4 では、2 つのソリューションを比較します。最後に、セクション 5 で描画します。 いくつかの結論。

Acumulaciones optimistas

  1. Resúmenes optimistas La idea de aceptar con optimismo la salida de bloques sin verificar su ejecución es ya presente en el documento técnico Bitcoin [7], que analiza los nodos de luz. Estos nodos sólo siguen la cadena de encabezado verificando la regla de consenso, haciéndolos vulnerables para aceptar bloques que contengan transacciones no válidas en caso de un ataque del 51%. Nakamoto propone solucionar esto problema mediante el uso de un sistema de "alerta" para advertir a los nodos ligeros que un bloque contiene transacciones no válidas. Este mecanismo fue implementado por primera vez por Al-Bassam, Sonnino y Buterin [8] en el que una falla Se utiliza un sistema de prueba basado en códigos de corrección de errores [9]. Para permitir la creación de pruebas de fallas, es necesario que los datos de todos los bloques, incluidos los bloques no válidos, estén disponibles para la red: este es el problema de disponibilidad de datos, que se resuelve utilizando un análisis de datos probabilístico mecanismo de muestreo. El primer diseño Optimistic Rollup fue presentado por John Adler y Mikerah Quintyne-Collins en 2019 [10], en el que se publican bloques en otro blockchain que define su consenso sobre el pedido. 2.1. Optimism Base de roca Bedrock [11] es la última versión de Optimism, un paquete acumulativo de contratos inteligentes. La versión anterior, La Máquina Virtual Optimista (OVM) requería un compilador ad hoc para compilar Solidity en su propio código de bytes: por el contrario, Bedrock es totalmente equivalente al EVM en que el motor de ejecución sigue la especificación de papel amarillo Ethereum [12]. 2.1.1. Depósitos Los usuarios pueden depositar transacciones a través de un contrato en Ethereum, el Portal Optimism, llamando a la función depositTransaction. Cuando se ejecuta una transacción, un Se emite el evento TransactionDeposited, que cada nodo del Rollup escucha para procesar depósitos. Una transacción depositada es una transacción L2 que se deriva de L1. Si la persona que llama del función es un contrato, la dirección se transforma añadiéndole un valor constante: esto evita Ataques en los que un contrato en L1 tiene la misma dirección que un contrato en L2 pero un código diferente. La inclusión en L2 de una transacción depositada está garantizada por la especificación dentro de una secuencia ventana. Las transacciones depositadas son un nuevo tipo de transacción compatible con EIP-2718 [13] con prefijo 0x7E, donde los campos codificados en rlp son: • bytes32 sourceHash: hash que identifica de forma única el origen de la transacción. • dirección de: la dirección del remitente. • dirección a: la dirección del destinatario, o la dirección cero si la transacción depositada es una creación de contrato.• uint256 mint: el valor que se creará en L2. • valor uint256: el valor que se enviará al destinatario. • bytes de datos: los datos de entrada. • bytes gasLimit: el límite de gas de la transacción. El sourceHash se calcula como keccak256 hash del bloque L1 hash y el registro L1 índice, que identifica de forma única un evento en un bloque. Dado que las transacciones depositadas se inician en L1 pero se ejecutan en L2, el sistema necesita un mecanismo para pagar en L1 el gas gastado en L2. Una solución es enviar ETH a través del Portal, pero esto implica que todas las personas que llaman (incluso las que llaman indirectamente) deben marcarse como pagaderas, y esto es Esto no es posible para muchos proyectos existentes. La alternativa es quemar el gas correspondiente en L1. El gas 𝑔 asignado a la transacción depositada se denomina gas garantizado. El precio del gas L2 en L1 no se sincroniza automáticamente, sino que se estima mediante un mecanismo similar al EIP-1559 [14]. La cantidad máxima de gas garantizada por bloque Ethereum es de 8 millones, con un objetivo de 2 millones. La cantidad 𝑐de ETH necesaria para pagar el gas en L2 es 𝑐= 𝑔𝑏L2 donde 𝑏L2 es el tarifa base en L2. El contrato en L1 quema una cantidad de gas igual a 𝑐/𝑏L2. El gas gastado para llamar. depositTransaction se reembolsa en L2: si esta cantidad es mayor que el gas garantizado, no se quema ningún gas. La primera transacción de un bloque rollup es una transacción depositada con atributos L1, utilizada para registrar en una L2, implemente previamente los atributos de los bloques Ethereum. Los atributos que otorga el predespliegue acceso son el número de bloque, la marca de tiempo, la tarifa base, el bloque hash y la secuencia número, que es el número de bloque de L2 en relación con el bloque L1 asociado (también llamado época); este número se restablece cuando comienza una nueva época. 2.1.2. Secuenciación Los nodos acumulativos derivan la cadena Optimism completamente de Ethereum. Esta cadena se extiende cada vez que se publican nuevas transacciones en L1, y sus bloques se reorganizan cada vez Se reorganizan Ethereum bloques. El Rollup blockchain se divide en épocas. Por cada 𝑛 número de bloque de Ethereum, hay una 𝑛época correspondiente. Cada época contiene al menos una bloque, y cada bloque en una época contiene una transacción depositada con atributos L1. el primer bloque en una época contiene todas las transacciones depositadas a través del Portal. Los bloques Layer 2 también pueden contenía transacciones secuenciadas, es decir, transacciones enviadas directamente al secuenciador. El secuenciador acepta transacciones de usuarios y construye bloques. Para cada bloque, construye un lote que se publicará el Ethereum. Se pueden publicar varios lotes de forma comprimida, tomando el nombre de canal. Un canal se puede dividir en varios fotogramas, en caso de que sea demasiado grande para una sola transacción. Un canal se define como la compresión con ZLIB [15] de archivos codificados en rlp. lotes. Los campos de un lote son el número de época, la época hash, el padre hash, el marca de tiempo y la lista de transacciones. Una ventana de secuenciación, identificada por una época, contiene un número fijo 𝑤 de L1 consecutivos bloques que un paso de derivación toma como entrada para construir un número variable de bloques L2. Para época 𝑛, la ventana de secuenciación 𝑛incluye los bloques [𝑛, 𝑛+𝑤). Esto implica que el pedido de transacciones y bloques L2 dentro de una ventana de secuenciación no se fija hasta que finaliza la ventana. Una transacción rollup se considera segura si el lote que la contiene ha sido confirmado en L1. Marcosse leen de los bloques L1 para reconstruir lotes. La implementación actual no permite La descompresión de un canal comienza hasta que se hayan recibido todas las tramas correspondientes. Inválido los lotes se ignoran. Las transacciones en bloque individuales se obtienen de los lotes, que se utilizado por el motor de ejecución para aplicar transiciones de estado y obtener el estado del Rollup. 2.1.3. Retiros Para procesar retiros, se implementa un sistema de mensajería L2 a L1. Ethereum necesita conocer el estado de L2 para poder aceptar retiros, y esto se hace publicando en el Oracle de salida L2 smart contract en L1, la raíz del estado de cada bloque L2. Estas raíces se aceptan con optimismo como válidos (o finalizados) si no se realiza ninguna prueba de fallo durante el período de disputa. Sólo las direcciones designadas como Proponentes pueden publicar raíces de salida. la validez de raíces productivas se incentiva haciendo que los Proponentes depositen una participación que se reduce drásticamente si son Se muestra que propuso una raíz no válida. Las transacciones se inician llamando a la función. iniciar el retiro en una implementación previa en L2 y luego finalizar en L1 llamando a la función finalizeWithdrawalTransaction en el Portal Optimism mencionado anteriormente. La raíz de salida correspondiente al bloque L2 se obtiene del Oráculo de salida L2; es verificado que está finalizado, es decir, que ha pasado el período de disputa; se verifica que la Salida La prueba raíz coincide con la prueba de Oracle; se verifica que el hash del retiro está incluido en él utilizando una Prueba de Retiro; que el retiro aún no se ha concretado; y luego el Se ejecuta la llamada a la dirección de destino, con el límite de gas, la cantidad de Ether y los datos especificados. 2.1.4. Cannon: el sistema a prueba de fallos Si un Rollup Full Node, al ejecutar localmente lotes y transacciones depositadas, descubre que el estado Layer 2 no coincide con la raíz del estado publicada en la cadena por un Proponente, puede ejecutarse una prueba de falla en L1 para demostrar que el resultado de la transición del bloque es incorrecto. debido a la gastos generales, procesar un bloque Rollup completo en L1 es demasiado costoso. La solución implementada por Bedrock es ejecutar en cadena solo la primera instrucción de desacuerdo de minigeth, compilándolo en una arquitectura MIPS que se ejecuta en un intérprete en cadena y se publica en L1. minigeth es una versión simplificada de geth 1 en la que el consenso, RPC y la base de datos han sido eliminados. Para encontrar la primera instrucción en desacuerdo, se realiza una búsqueda binaria interactiva entre el que inició la prueba de fallas y el que publicó la raíz de salida. cuando la prueba comienza, ambas partes publican la raíz del estado de memoria MIPS a mitad de la ejecución de el bloque en el contrato Challenge: si el hash coincide significa que ambas partes están de acuerdo en el primera mitad de la ejecución publicando así la raíz de la mitad de la segunda mitad, en caso contrario la mitad del primer semestre se publica y así sucesivamente. Al hacerlo se logra la primera instrucción de desacuerdo. en un número logarítmico de pasos en comparación con la ejecución original. Si uno de los dos se detiene interactuando, al final del período de disputa el otro participante gana automáticamente. Para procesar la instrucción, el intérprete MIPS necesita acceso a su memoria: dado que la raíz es disponibles, se pueden publicar las celdas de memoria necesarias demostrando su inclusión. Para acceder el estado del EVM, se hace uso del Oráculo Preimagen: dado el hash de un bloque devuelve 1https://geth.ethereum.org/docs

el encabezado del bloque, desde el cual se puede obtener el hash del bloque anterior y regresar al cadena, u obtenga el hash del estado y los registros de los cuales se puede obtener la imagen previa. El oracle Es implementado por minigeth y reemplaza la base de datos. Se realizan consultas a otros nodos para obtener las preimágenes.

楽観的なロールアップ

  1. 楽観的なロールアップ ブロックの実行を検証せずに、ブロックの出力を楽観的に受け入れるというアイデアは次のとおりです。 ライト ノードについて説明している Bitcoin ホワイトペーパー [7] にすでに記載されています。これらのノードは後続するだけです コンセンサス ルールを検証してヘッダー チェーンをブロックし、ブロックを受け入れやすくする 51% 攻撃が発生した場合に無効なトランザクションが含まれる。ナカモトはこれを解決することを提案します 「アラート」システムを使用して、ブロックに無効なトランザクションが含まれていることをライトノードに警告することで、この問題を解決します。 このメカニズムは、Al-Bassam、Sonnino、Buterin [8] によって最初に実装されました。 誤り訂正符号[9]に基づく証明システムが使用されます。の作成を可能にするために、 フォールトプルーフのためには、無効なブロックを含むすべてのブロックのデータが利用可能である必要があります。 ネットワーク: これはデータ可用性問題であり、確率的データを使用して解決されます。 サンプリング機構。最初のオプティミスティック ロールアップ デザインは、ジョン アドラーと 2019 年 [10] の Mikerah Quintyne-Collins、ブロックは別の blockchain で公開されています それが注文に関する彼らの合意を定義します。 2.1. Optimism 岩盤 Bedrock [11] は、スマート コントラクト ロールアップである Optimism の最新バージョンです。以前のバージョンでは、 Optimistic Virtual Machine (OVM) では、Solidity をコンパイルするためにアドホック コンパイラーが必要でした。 独自のバイトコード: 対照的に、Bedrock は実行エンジンという点で EVM と完全に同等です。 Ethereum イエロー ペーパー仕様 [12] に従います。 2.1.1.預金 ユーザーは、depositTransaction 関数を呼び出すことで、Ethereum、Optimism ポータル上のコントラクトを通じてトランザクションをデポジットできます。 トランザクションが実行されると、 TransactionDeposited イベントが発行され、ロールアップ内の各ノードが処理をリッスンします。 預金。入金されたトランザクションは、L1 から派生した L2 トランザクションです。の発信者が 関数がコントラクトである場合、アドレスはそれに定数値を追加することによって変換されます。これにより、 L1 のコントラクトが L2 のコントラクトと同じアドレスを持つが、コードが異なる攻撃。 入金されたトランザクションが L2 に含まれることは、シーケンス内の仕様によって保証されます。 窓。 入金されたトランザクションは、プレフィックス 0x7E を持つ新しい EIP-2718 互換トランザクション タイプ [13] です。 ここで、rlp エンコードされたフィールドは次のとおりです。 • bytes32 sourceHash: トランザクションのソースを一意に識別する hash。 • address from: 送信者のアドレス。 • address to: 受信者のアドレス、または入金されたトランザクションが 契約書の作成。• uint256 mint: L2 で作成される値。 • uint256 値: 受信者に送信される値。 • バイトデータ: 入力データ。 • バイトの GasLimit: トランザクションのガス制限。 sourceHash は、L1 ブロック hash および L1 ログの keccak256 hash として計算されます。 インデックス。ブロック内のイベントを一意に識別します。 入金されたトランザクションは L1 で開始されますが、L2 で実行されるため、システムには L2 で消費されたガスの対価を L1 で支払うメカニズム。解決策の 1 つは、ポータル経由で ETH を送信することです。 しかしこれは、すべての呼び出し元 (間接的な呼び出し元も含む) が支払い可能としてマークされなければならないことを意味します。 多くの既存プロジェクトでは不可能です。別の方法は、L1 で対応するガスを燃焼させることです。 入金されたトランザクションに割り当てられるガス𝑔を保証ガスと呼びます。 L2ガスの価格は L1 は自動的には同期されませんが、EIP-1559 と同様のメカニズムを使用して推定されます。 [14]。 Ethereum ブロックごとに保証されるガスの最大量は 800 万であり、目標は 200万の。 L2 でガスの支払いに必要な ETH の量 𝑐 は 𝑐= 𝑔𝑏L2 です。ここで、𝑏L2 は L2 の基本料金。 L1 のコントラクトでは、𝑐/𝑏L2 に等しい量のガスが燃焼します。通話に費やしたガソリン デポジットトランザクションは L2 で払い戻されます。この金額が保証されたガスより大きい場合、 ガスは燃焼しません。 rollup ブロックの最初のトランザクションは、L1 属性が登録されたトランザクションであり、登録に使用されます。 L2 では、Ethereum ブロックの属性を事前展開します。事前デプロイによって与えられる属性 アクセスできるのは、ブロック番号、タイムスタンプ、基本料金、ブロック hash、およびシーケンスです。 番号。これは、関連する L1 ブロックに対する相対的な L2 のブロック番号 (エポックとも呼ばれます)。 この番号は、新しいエポックが開始されるとリセットされます。 2.1.2.シーケンス ロールアップ ノードは、Optimism チェーンを完全に Ethereum から派生させます。このチェーンは延長されます 新しいトランザクションが L1 で公開されるたびに、そのブロックはそのたびに再編成されます Ethereum ブロックが再編成されます。ロールアップ blockchain はエポックに分割されています。 𝑛ごとに ブロック番号 Ethereum には、対応する 𝑛エポックがあります。各エポックには少なくとも 1 つが含まれます ブロックであり、エポック内の各ブロックには、L1 属性がデポジットされたトランザクションが含まれます。最初のブロック エポックには、ポータルを通じて入金されたすべてのトランザクションが含まれます。 Layer 2 ブロックは、 シーケンスされたトランザクション、つまりシーケンサーに直接送信されるトランザクションが含まれていました。 シーケンサーはユーザーからトランザクションを受け入れ、ブロックを構築します。ブロックごとに、 Ethereum に公開されるバッチ。複数のバッチを圧縮して公開できます。 名前チャンネルを取得します。チャネルが大きすぎる場合に備えて、チャネルを複数のフレームに分割できます。 単一のトランザクション。チャネルは、rlp エンコードされた ZLIB [15] による圧縮として定義されます。 バッチ。バッチのフィールドは、エポック番号、エポック hash、親 hash、 タイムスタンプとトランザクションリスト。 エポックによって識別されるシーケンス ウィンドウには、連続する L1 の固定数 𝑤 が含まれます。 導出ステップが可変数の L2 ブロックを構築するために入力として受け取るブロック。のために エポック 𝑛 では、シーケンス ウィンドウ 𝑛 にはブロック [𝑛, 𝑛+𝑤) が含まれます。これは、順序付けが シーケンス ウィンドウ内の L2 トランザクションとブロックの数は、ウィンドウが終了するまで修正されません。 rollup トランザクションは、それを含むバッチが L1 で確認された場合、安全であると呼ばれます。フレームバッチを再構築するために L1 ブロックから読み取られます。現在の実装では許可されていません 対応するすべてのフレームが受信されるまで、チャネルの圧縮解除が開始されます。無効です バッチは無視されます。個々のブロック トランザクションはバッチから取得されます。 状態遷移を適用し、ロールアップ状態を取得するために実行エンジンによって使用されます。 2.1.3.出金 出金を処理するために、L2-to-L1 メッセージング システムが実装されています。 Ethereum 出金を受け入れるためには L2 の状態を知る必要があり、これはパブリッシングによって行われます。 L2 の出力 Oracle smart contract L1 の各 L2 ブロックのステート ルート。これらの根 実行中にフォールトプルーフが実行されなければ、有効(または確定)として楽観的に受け入れられます。 争議期間。プロポーザとして指定されたアドレスのみが出力ルートを公開できます。有効性 提案者に賭け金を預けてもらうことで、出力ルートの割合が奨励されます。 無効なルートを提案したことが示されています。トランザクションは関数を呼び出すことで開始されます L2 での事前デプロイでのInitialWithdrawal と、関数の呼び出しによる L1 での終了 前述の Optimism ポータルでのfinalizeWithdrawalTransaction。 L2 ブロックに対応する出力ルートは、L2 Output Oracle から取得されます。それはです それが最終決定されたこと、つまり紛争期間が経過したことを確認しました。出力が検証される Root Proof は Oracle Proof と一致します。出金のhashが含まれていることを確認します その中で引き出し証明を使用します。撤退がまだ完了していないこと。そして、 指定されたガス制限、イーサの量、およびデータを使用して、ターゲット アドレスへの呼び出しが実行されます。 2.1.4.大砲: 故障防止システム ロールアップ フル ノードがバッチとデポジットされたトランザクションをローカルで実行することによって、次のことを発見した場合 Layer 2 状態は、プロポーザーによってオンチェーンで公開された状態ルートと一致しないため、実行できます ブロック遷移の結果が正しくないことを証明するための L1 のフォールトプルーフ。のせいで オーバーヘッドのため、L1 でロールアップ ブロック全体を処理するのにコストがかかりすぎます。実装されたソリューション Bedrock によると、minigeth の不一致の最初の命令のみがオンチェーンで実行されます。 それを MIPS アーキテクチャにコンパイルし、オンチェーン インタプリタ上で実行して公開します。 L1で。 minigeth は、コンセンサス、RPC、およびデータベースを備えた geth 1 の簡易バージョンです。 は削除されています。 不一致の最初の命令を見つけるために、対話型バイナリ検索が次の間で実行されます。 フォールトプルーフを開始した者と出力ルートを公開した者です。証明のとき が開始されると、両方の当事者が実行の途中で MIPS メモリ状態のルートを公開します。 チャレンジ契約のブロック: hash が一致する場合、両当事者が 実行の前半は、後半の半分のルートを公開し、それ以外の場合は半分を公開します。 前半部分などを公開します。そうすることで、意見の不一致の最初の指示が達成されます 元の実行と比較して、対数的なステップ数で実行されます。 2台のうちどちらかが止まったら 対話すると、紛争期間の終了時に他の参加者が自動的に勝ちます。 命令を処理するには、MIPS インタプリタはそのメモリにアクセスする必要があります。 必要なメモリセルが利用可能であれば、そのメモリセルが含まれていることを証明することで公開できます。アクセスするには EVM の状態では、Preimage Oracle が使用されます。返されるブロックの hash が与えられると、 1https://geth.ethereum.org/docs

ブロックヘッダー。そこから前のブロックの hash を取得して、そのブロックに戻ることができます。 チェーンするか、プリイメージを取得できる状態とログの hash を取得します。 oracle minigeth によって実装され、データベースを置き換えます。他のノードに対してクエリが実行され、 プリイメージを取得します。

Resúmenes de validez

  1. Resúmenes de validez El objetivo de un Validity Rollup es demostrar criptográficamente la validez de la transición de estado. dada la secuencia de transacciones con una prueba breve que se puede verificar en comparación sublineal al momento de los cálculos originales. Este tipo de certificados se denominan pruebas de integridad computacional y se implementan prácticamente con SNARK (Succint Non-interactive ARgument of Knowledge), que utilizan aritmética. circuitos como su modelo computacional. Las diferentes implementaciones de SNARK difieren en el tiempo de prueba, tiempo de verificación, la necesidad de una configuración confiable y resistencia cuántica [16, 17]. STARK (Escalable Argumento transparente de conocimiento) [18] son un tipo de SNARK que no requiere una persona confiable configuración y son resistentes a los cuánticos, al tiempo que renuncian a cierta eficiencia en la prueba y verificación en comparación con otras soluciones. 3.1. StarkNet StarkNet es un paquete acumulativo de validez de contrato inteligente desarrollado por StarkWare que utiliza STARK sistema de prueba para validar su estado a Ethereum. Para facilitar la construcción de pruebas de validez, se Se utiliza una máquina virtual diferente a la EVM, cuyo lenguaje de alto nivel es Cairo. 3.1.1. Depósitos Los usuarios pueden depositar transacciones a través de un contrato en Ethereum llamando a sendMessageToL2 función. El mensaje se registra calculando su hash y aumentando un contador. Secuenciadores escuche el evento LogMessageToL2 y codifique la información en una transacción StarkNet que llama a una función de un contrato que tiene el decorador l1_handler. Al final de la ejecución, cuando se produce la prueba de transición de estado, se le adjunta el consumo del mensaje y se elimina disminuyendo su contador. La especificación StarkNet no requiere la inclusión de transacciones depositadas, por lo que un gas Se necesita mercado para incentivar a los secuenciadores a publicarlos en L2. En la versión actual, porque el secuenciador está centralizado y administrado por StarkWare, el costo de las transacciones depositadas sólo está determinado por el coste de ejecución del depósito. Este costo se paga enviando ETH a enviar mensaje a L2. Estos Éteres permanecen bloqueados en L1 y se transfieren al Secuenciador en L1, cuando la transacción depositada se incluye en una transición de estado. La cantidad de ETH enviada, si la transacción depositada está incluida, se gasta en su totalidad, independientemente de la cantidad de gas consumido en L2. StarkNet no tiene un sistema que haga que los atributos del bloque L1 estén disponibles automáticamente. Alternativamente, Fossil es un protocolo desarrollado por Oiler Network 2 que permite, dado un hash de un bloque, cualquier información se obtendrá de Ethereum mediante la publicación de preimágenes. 2https://www.oiler.network/3.1.2. Secuenciación El estado actual de StarkNet se puede derivar completamente de Ethereum. Cualquier diferencia de estado entre transiciones se publica en L1 como datos de llamada. Se publican las diferencias para cada contrato. y se guardan como uint256[] con la siguiente codificación: • Número de campos relativos a implementaciones de contratos. • Para cada contrato publicado: – La dirección del contrato publicado. – El hash del contrato publicado. – El número de argumentos del constructor del contrato. – La lista de argumentos del constructor. • Número de contrato cuyo almacenamiento ha sido modificado. • Por cada contrato que haya sido modificado: – La dirección del contrato modificado. – El número de actualizaciones de almacenamiento. – Los pares clave-valor de las direcciones de almacenamiento con los nuevos valores. Las diferencias de estado se publican en orden, por lo que basta con leerlas secuencialmente para reconstruir el estado. 3.1.3. Retiros Para enviar un mensaje de L2 a L1, se utiliza la llamada al sistema send_message_to_L1. El mensaje es publicado en L1 aumentando su contador hash junto con la prueba y finalizado llamando al función consumeMessageFromL2 en StarkGate smart contract en L1, que disminuye el mostrador. Cualquiera puede finalizar cualquier retiro. 3.1.4. Pruebas de validez La Máquina Virtual Cairo [19] está diseñada para facilitar la construcción de pruebas STARK. El lenguaje Cairo permite describir el cómputo con una programación de alto nivel. lenguaje, y no directamente como un circuito. Esto se logra mediante un sistema de ecuaciones polinómicas. 3 que representa un cálculo único: el ciclo FDE de una arquitectura von Neumann. el numero de restricciones es, por tanto, fija e independiente del tipo de cálculo, permitiendo sólo una Programa verificador para cada programa cuyo cálculo deba ser probado. StarkNet agrega múltiples transacciones en una única prueba STARK utilizando un probador compartido llamado AGUDO. Las pruebas se envían a un smart contract el Ethereum, que verifica su validez. y actualiza la raíz de Merkle correspondiente al nuevo estado. El coste sublineal de verificar una La prueba de validez permite que su costo se amortice en múltiples transacciones. 3llamada Representación Algebraica Intermedia (AIR)

有効性ロールアップ

  1. 有効性ロールアップ Validity Rollup の目的は、状態遷移の有効性を暗号的に証明することです。 準線形的に比較できる検証可能な短い証明を伴うトランザクションのシーケンスが与えられたとします。 元の計算の時点まで。 この種の証明書は計算整合性証明と呼ばれ、実際には算術演算を使用する SNARK (Succint Non-interactive ARgument of Knowledge) で実装されます。 回路を計算モデルとして使用します。 SNARK 実装が異なれば証明時間も異なります。 検証時間、信頼できるセットアップの必要性、および量子耐性 [16、17]。 STARK (スケーラブル) 透明な知識引数) [18] は、信頼できる認証を必要としない SNARK の一種です。 証明と検証の効率をある程度犠牲にする一方で、量子耐性を備えています。 他のソリューションと比較して。 3.1. StarkNet StarkNet は、Starkware によって開発された、STARK を使用するスマート コントラクト有効性ロールアップです。 Ethereum までの状態を検証する証明システム。有効性証明の構築を容易にするために、 EVM とは異なる仮想マシンが使用されており、その高級言語は Cairo です。 3.1.1.預金 ユーザーは、sendMessageToL2 を呼び出すことで、Ethereum のコントラクトを介してトランザクションを入金できます。 機能。メッセージは、hash を計算し、カウンターを増やすことによって記録されます。シーケンサー LogMessageToL2 イベントをリッスンし、StarkNet トランザクションで情報をエンコードします。 l1_handler デコレータを持つコントラクトの関数を呼び出します。実行の最後に、 状態遷移の証明が生成されると、メッセージの消費がそれに添付されます そしてカウンターを減らすことで削除されます。 StarkNet 仕様では、入金されたトランザクションを含めることは必須ではないため、 シーケンサーが L2 で公開するよう奨励するには、市場が必要です。現在のバージョンでは、 シーケンサーは StarkWare によって集中管理され、入金されたトランザクションのコストは はデポジットの実行コストによってのみ決定されます。この費用はETHを送金することで支払われます。 L2 にメッセージを送信します。これらのイーサは L1 でロックされたままになり、L1 でシーケンサに転送されます。 L1、入金されたトランザクションが状態遷移に含まれる場合。送金されたETHの量(場合) ガスの消費量に関係なく、入金されたトランザクションは含まれており、全額使用されます。 L2で。 StarkNet には、L1 ブロック属性を自動的に使用可能にするシステムがありません。 また、Fossil は、Oiler Network 2 によって開発されたプロトコルであり、hash を指定すると、 ブロック、プレイメージを公開することによって Ethereum から取得される情報。 2https://www.oiler.network/3.1.2.シーケンス StarkNet の現在の状態は、すべて Ethereum から派生できます。あらゆる状態の違い トランジション間はコールデータとして L1 に公開されます。差異は契約ごとに公開されます 次のエンコードを使用して uint256[] として保存されます。 • 契約展開に関するフィールドの数。 • 公開された各契約について: – 公開された契約書の住所。 – 公開された契約の hash。 – コントラクト コンストラクターの引数の数。 – コンストラクター引数のリスト • ストレージが変更された契約の数。 • 変更された各契約について: – 変更された契約の住所。 – ストレージ更新の数。 – 新しい値を含むストレージ アドレスのキーと値のペア。 状態の違いは順番に公開されているため、順番に読んでいけば十分です。 状態を再構築します。 3.1.3.出金 L2 から L1 にメッセージを送信するには、syscall send_message_to_L1 を使用します。メッセージは 証明とともに hash カウンタを増やすことで L1 に公開され、 L1 の StarkGate smart contract の関数 ConsumerMessageFromL2 (デクリメント) カウンター。誰でも出金を完了できます。 3.1.4.有効性の証明 Cairo 仮想マシン [19] は、STARK 証明の構築を容易にするように設計されています。 Cairo 言語を使用すると、高レベルのプログラミングで計算を記述することができます。 言語であり、直接回路としてではありません。これは多項方程式系によって実現されます。 図3は、単一の計算、すなわちフォン・ノイマン・アーキテクチャのFDEサイクルを表す。番号 したがって、制約の数は固定され、計算の種類に依存せず、1 つだけが許可されます。 計算を証明する必要があるすべてのプログラムの検証プログラム。 StarkNet は、共有証明者を使用して複数のトランザクションを単一の STARK 証明に集約します シャープという名前。証明は Ethereum の smart contract に送信され、その有効性が検証されます。 そして、新しい状態に対応するマークル ルートを更新します。検証にかかるサブリニアコスト 有効性の証明により、そのコストを複数のトランザクションにわたって償却することができます。 3代数中間表現 (AIR) と呼ばれる

Comparación

  1. Comparación 4.1. tiempo de retiro El aspecto más importante que distingue los rollups optimistas de los rollups de validez es la tiempo que transcurre entre la inicialización de un retiro y su finalización. En ambos casos, los retiros se inicializan en L2 y finalizan en L1. El StarkNet, la finalización es posible como tan pronto como se acepte la prueba de validez de la nueva raíz estatal el Ethereum: en teoría, es Es posible retirar fondos en el primer bloque de L1 después de la inicialización. En la práctica, el La frecuencia de envío de pruebas de validez el Ethereum es una compensación entre la velocidad del bloque. finalización y agregación de pruebas. Actualmente StarkNet proporciona pruebas de validez para su verificación. cada 10 horas 4, pero se pretende disminuir a medida que aumenta la actividad de transacciones. En Optimism Bedrock es posible finalizar un retiro solo al final de la disputa. período (actualmente 7 días), después del cual una raíz se considera automáticamente válida. la longitud de este período está determinado principalmente por el hecho de que las pruebas de fallas pueden ser censuradas el Ethereum hasta su fin. La probabilidad de éxito de este tipo de ataque disminuye exponencialmente a medida que aumenta el tiempo: E[valor restado] = 𝑉𝑝𝑛 donde 𝑛 es el número de bloques en un intervalo, 𝑉 es la cantidad de fondos que se pueden restar publicando una raíz no válida, y 𝑝 es la probabilidad de realizar con éxito una censura ataque en un solo bloque. Supongamos que esta probabilidad es del 99%, que el valor bloqueado en el Rollup es un millón de Ether, y que los bloques en un intervalo son 1800 (6 horas de bloques con un 12 Intervalo de segundos): el valor esperado es aproximadamente 0,01391 éter. El sistema se hace seguro mediante pedir a los proponentes que apuesten una cantidad de Ether mucho mayor que el valor esperado. Winzer et al. mostró cómo llevar a cabo un ataque de censura usando un simple smart contract eso asegura que ciertas áreas de memoria en el estado no cambien [20]. Modelando el ataque Como juego de Markov, el artículo muestra que la censura es la estrategia dominante para un sistema racional. productor del bloque si recibe una compensación mayor que la que incluye la transacción que cambia la memoria. El valor de 𝑝 discutido anteriormente se puede ver como el porcentaje del bloque racional productores de la red, donde “racional” no tiene en cuenta la posible penalización externalidades, como una menor confianza en el blockchain que disminuye su valor de criptomoneda. El siguiente código presenta un smart contract que puede usarse para realizar un ataque de censura. en Bedrock. El ataque explota los incentivos de los productores de bloques ofreciéndoles un soborno. censurar las transacciones que modificarían partes específicas del estado. El principal del contrato La función ClaimBribe permite a los productores de bloques reclamar el soborno si censuran con éxito. la transacción objetivo comprobando que la raíz de salida no válida no se haya tocado. función reclamoSoborno(bytes memoria almacenamientoPrueba) externo { require(!claimed[block.number], "soborno ya reclamado"); Memoria OutputProposal actual = StorageOracle.getStorage(L2_ORACLE, block.number, SLOT, prueba de almacenamiento); require(invalidOutputRoot == current.outputRoot, "ataque fallido"); reclamado[bloque.número] = verdadero; (bool enviado,) = block.coinbase.call{valor: sobornoAmount}(""); 4https://etherscan.io/address/0xc662c410c0ecf747543f5ba90660f6abebd9c8c4require(enviado, "no se pudo enviar ether"); } Listado 1: Ejemplo de un contrato que incentiva un ataque de censura a Bedrock. La duración del período de disputa también debe tener en cuenta el hecho de que la prueba de la culpa es una prueba interactiva y por lo tanto se debe proporcionar tiempo suficiente para que los participantes interactúen y que cualquier interacción podría ser censurada. Si el último movimiento ocurre en un momento muy cercano al Al final del período de disputa, el costo de la censura es significativamente menor. Aunque la censura es la estrategia dominante, la probabilidad de éxito es menor porque los nodos de censura son vulnerables a Ataques de denegación de servicio: un atacante puede generar transacciones muy complejas que terminan con el publicación de una prueba de culpa sin coste alguno, ya que no se pagarían tasas. En casos extremos, un largo período de disputa permite la coordinación en caso de una solución exitosa. Ataque de censura para organizar una bifurcación y excluir a los productores de bloques atacantes. otro posible ataque consiste en publicar más propuestas de raíz estatal de las que los litigantes pueden verificar, lo cual se puede evitar utilizando un límite de frecuencia. 4.1.1. Retiros rápidos y optimistas Dado que la validez de un Optimistic Rollup puede ser verificada en cualquier momento por cualquier Nodo Completo, un El oracle de confianza se puede utilizar para saber en L1 si el retiro se puede finalizar de forma segura. esto El mecanismo fue propuesto por primera vez por Maker [21]: un oracle verifica el retiro, publica el resultado en L1 sobre el cual se asigna al usuario un préstamo que devenga intereses, que se cerrado al final de 7 días, es decir, cuando realmente se puede finalizar el retiro. esta solución introduce una suposición de confianza, pero en el caso de Maker se minimiza ya que el operador oracle es gestionado por la misma organización que asume el riesgo al conceder el préstamo. 4.2. Costos de transacción El costo de las transacciones L2 está determinado principalmente por la interacción con la L1. En ambas soluciones El costo computacional de las transacciones es muy económico ya que se ejecuta completamente fuera de la cadena. Optimism publica datos de llamada de transacciones L2 como datos de llamada y rara vez (o nunca) ejecuta la falla pruebas, por lo tanto calldata es el recurso más caro. El 12 de enero de 2022 una red Bedrock se lanzó en la red de prueba Goerli de Ethereum. Se puede calcular la tasa de compresión del gas. rastreando la cantidad de gas utilizada en Bedrock en un período determinado y comparándola con la cantidad de gas gastado en L1 para los bloques correspondientes. Usando este método una compresión de gas Se encuentra una tasa de ∼20: 1, pero esta cifra puede diferir con la actividad real en la red principal. StarkNet publica el Ethereum cada cambio en el estado L2 como datos de llamada, por lo tanto, el almacenamiento es el recurso más caro. Dado que la red no utiliza el EVM, el costo de transacción la compresión no se puede estimar trivialmente. Asumiendo el costo de ejecución y calldata para ser insignificante, es posible calcular la relación de compresión de las escrituras de almacenamiento en comparación con L1. Suponiendo que no se implemente ningún contrato y que 10 celdas a las que no se accedió anteriormente en StarkNet están modificado, se encuentra una tasa de compresión del costo de escritura de almacenamiento de ~24:1. Si se sobrescribe una celda 𝑛veces entre publicaciones de datos, el costo de cada escritura será 1/𝑛en comparación con el costo de un solo escrito, ya que sólo se publica el último. El costo se puede minimizar aún más mediantecomprimir valores de uso frecuente. El costo de la verificación de la prueba de validez se divide entre las transacciones a las que se refiere: por ejemplo, StarkNet el bloque 4779 contiene 200 transacciones y su La prueba de validez consume 267830 unidades de gas, o 1339,15 gas por cada transacción. 4.2.1. Optimización de datos de llamada: contrato de caché A continuación se presenta un smart contract que implementa un caché de direcciones para uso frecuente direcciones aprovechando el hecho de que el almacenamiento y la ejecución son mucho menos costosos recursos, junto con un contrato de Friends que demuestra su uso. Este último realiza un seguimiento de la "amigos" de una dirección que se puede registrar llamando a la función addFriend. si una dirección ya se ha utilizado al menos una vez, se puede agregar llamando a addFriendWithCache función: los índices de caché son números enteros de 4 bytes mientras que las direcciones están representadas por 20 bytes, por lo que hay un ahorro de 5:1 en el argumento de la función. La misma lógica se puede utilizar para otros datos. tipos como números enteros o, más generalmente, bytes. contrato AddressCache { mapeo (dirección => uint32) dirección pública2clave; dirección[] clave pública2dirección; función cacheWrite(dirección _dirección) retornos internos (uint32) { require(key2address.length < type(uint32).max, "AddressCache: el caché está lleno"); require(address2key[_address] == 0, "AddressCache: dirección ya almacenada en caché"); // las claves deben comenzar desde 1 porque 0 significa "no encontrado" clave uint32 = uint32(clave2dirección.longitud + 1); dirección2clave[_dirección] = clave; key2address.push(_address); tecla de retorno; } función cacheRead(uint32 _key) vista pública devuelve (dirección) { require(_key <= key2address.length && _key > 0, "AddressCache: clave no encontrada"); devolver clave2dirección[_clave - 1]; } } Listado 2: Contrato de caché de direcciones. contrato Amigos es AddressCache { mapeo (dirección => dirección []) amigos públicos; función agregarAmigo(dirección _amigo) pública { amigos[msg.sender].push(_friend); cacheWrite(_amigo); } función addFriendWithCache (uint32 _friendKey) público { amigos[msg.sender].push(cacheRead(_friendKey)); } función getFriends() devuelve la vista pública (dirección[] memoria) { devolver amigos[msg.sender];} } Listado 3: Ejemplo de un contrato que hereda la caché de direcciones. El contrato admite en caché alrededor de 4 mil millones (232) direcciones y agregar un byte da alrededor de 1 billón (240). 4.2.2. Optimización del almacenamiento: los filtros de Bloom En StarkNet existen varias técnicas para minimizar el uso de almacenamiento. Si no es necesario garantizar la disponibilidad de los datos originales, entonces es suficiente guardar en cadena su hash: esto es el mecanismo utilizado para guardar datos para un ERC-721 (NFT) [22], es decir, un enlace IPFS que resuelve el hash de los datos si están disponibles. Para datos que se almacenan varias veces, es posible utilizar una búsqueda tabla similar al sistema de almacenamiento en caché introducido para Optimism, que requiere que todos los valores se guarden en menos una vez. Para algunas aplicaciones, se puede evitar guardar todos los valores utilizando un filtro Bloom. [23, 24, 25], es decir, una estructura de datos probabilística que permite saber con certeza si un elemento no pertenece a un conjunto pero admite una probabilidad pequeña pero no despreciable de ser falso positivos. Un filtro Bloom se inicializa como una matriz de 𝑚bits en cero. Para agregar un elemento, funciones 𝑘hash con una distribución aleatoria uniforme, cada uno de los cuales se asigna a un bit de la matriz que se establece a 1. Para comprobar si un elemento pertenece al conjunto ejecutamos las funciones 𝑘hash y verificamos que los 𝑘bits están establecidos en 1. En un filtro de Bloom simple no hay forma de distinguir si un elemento realmente pertenece al conjunto o es un falso positivo, una probabilidad que crece a medida que el número de entradas aumenta. Después de insertar 𝑛elementos: P[falso positivo] = (︃ 1- [︂ 1-1 𝑚 ]︂𝑘𝑛)︃𝑘 ≈ (︁ 1 −𝑒−𝑘𝑛/𝑚)︁𝑘 suponiendo independencia de la probabilidad de cada conjunto de bits. Si 𝑛elementos (¡de tamaño arbitrario!) son se espera que se incluya y la probabilidad de que se tolere un falso positivo es 𝑝, el tamaño de la matriz se puede calcular como: 𝑚= −𝑛ln 𝑝 (en 2)2 Mientras que el número óptimo de funciones hash es: 𝑘= 𝑚 𝑛ln 2 Si suponemos que insertamos 1000 elementos con una tolerancia del 1%, el tamaño de la matriz es de 9585 bits. con 𝑘= 6, mientras que para una tolerancia del 0,1% se convierte en 14377 bits con 𝑘= 9. Si un millón de elementos se espera que se inserten, el tamaño de la matriz es de aproximadamente 1170 kB para el 1% y 1775 kB para 0.1%, con los mismos valores de 𝑘, ya que depende únicamente de 𝑝[26]. En un juego en el que los jugadores no deben ser asignados a un oponente al que ya hayan desafiado, En lugar de guardar en el almacenamiento para cada jugador la lista de oponentes anteriores, se puede usar un Bloom. filtrar. El riesgo de no desafiar a algunos jugadores suele ser aceptable y el filtro se puede restablecer periódicamente.4.3. Ethereum compatibilidad La principal ventaja de ser compatible con EVM y Ethereum es la reutilización de todos los disponibles herramientas. Ethereum smart contracts pueden publicarse en Optimism sin ninguna modificación ni nuevas auditorías. Las billeteras siguen siendo compatibles, herramientas de desarrollo y análisis estático, análisis general herramientas, herramientas de indexación y oracles. Ethereum y Solidity tienen una larga historia de estudios bien estudiados. vulnerabilidades, como ataques de reentrada, desbordamientos y desbordamientos, préstamos flash y oracle manipulaciones. Debido a esto, Optimism pudo capturar una gran cantidad de valor en poco tiempo. tiempo. Elegir adoptar una máquina virtual diferente implica tener que reconstruir todo un ecosistema, con la ventaja de una mayor libertad de implementación. StarkNet implementa la cuenta de forma nativa abstracción, que es un mecanismo por el cual cada cuenta es un smart contract que puede implementar lógica arbitraria siempre que cumpla con una interfaz (de ahí el término abstracción): esto permite el uso de diferentes esquemas de firma digital, la capacidad de cambiar la clave privada utilizando el misma dirección o utilice una firma múltiple. La comunidad Ethereum propuso la introducción de este mecanismo con EIP-2938 en 2020, pero la propuesta ha permanecido obsoleta durante más de un año como A otras actualizaciones se les ha dado más prioridad [27]. Otro beneficio importante obtenido de la compatibilidad es la reutilización de clientes existentes: Optimism utiliza una versión de geth para su propio nodo con solo ~800 líneas de diferencia, que ha sido desarrollado, probado y mantenido desde 2014. Tener un cliente sólido es crucial ya que define lo que se acepta como válido o no en la red. Un error en la implementación de la prueba de fallos. El sistema podría hacer que una prueba incorrecta sea aceptada como correcta o una prueba correcta para una prueba no válida. bloque sea aceptado como incorrecto, comprometiendo el sistema. La probabilidad de este tipo de El ataque se puede limitar con una diversidad de clientes más amplia: Optimism puede reutilizar además de geth el otros Ethereum clientes ya mantenidos, y se está desarrollando otro cliente basado en Erigon. ya en marcha. En 2016, un problema en la gestión de la memoria de geth fue explotado durante un ataque DoS y la primera línea de defensa fue recomendar el uso de Parity, el segundo más cliente usado en ese momento 5. StarkNet enfrenta el mismo problema con las pruebas de validez, pero los clientes tienen que escribirse desde cero y el sistema de prueba es mucho más complejo, y en consecuencia También es mucho más complejo garantizar la corrección.

比較

  1. 比較 4.1.出金時間 楽観的ロールアップと妥当性ロールアップを区別する最も重要な側面は、 出金の開始から完了までに経過する時間。どちらの場合も、 出金は L2 で初期化され、L1 で完了します。 StarkNet では、次のようにファイナライズが可能です 新しい状態ルートの有効性証明が Ethereum で受け入れられ次第、理論的には次のようになります。 初期化後の L1 の最初のブロックで資金を引き出すことが可能です。実際には、 Ethereum で有効性証明を送信する頻度は、ブロックの速度とのトレードオフです ファイナライゼーションと証明の集約。現在、StarkNet は検証のための有効性証明を提供しています 10 時間ごと 4 ですが、トランザクション アクティビティが増加するにつれて減少することが意図されています。 Optimism Bedrock では、紛争の終了時にのみ撤回を完了することができます。 期間 (現在は 7 日) が経過すると、ルートは自動的に有効とみなされます。長さ この期間は主に、Ethereum に欠陥証明が検閲されるまでの期間によって決定されます。 その終わり。このタイプの攻撃の成功確率は、時間の経過とともに指数関数的に減少します。 E[減算値] = 𝑉𝑝𝑛 ここで、𝑛は間隔内のブロック数、𝑉は差し引くことができる資金の量です 無効なルートを公開することによって、𝑝は検閲が正常に実行される確率です 単一ブロックで攻撃します。この確率が 99% で、値がロールアップにロックされていると仮定します。 は 100 万イーサ、間隔内のブロックは 1800 (12 個のブロックで 6 時間) 秒間隔): 期待値は約 0.01391 Ether です。システムの安全性は次のとおりです。 提案者に、期待値よりもはるかに大量のイーサをステーキングするよう求めます。 ウィンザーら。単純な smart contract を使用して検閲攻撃を実行する方法を示しました。 これにより、状態内のメモリの特定の領域が [20] 変更されないことが保証されます。攻撃のモデル化 この論文は、マルコフゲームとして、検閲が合理的なアプローチの支配的な戦略であることを示しています。 変更を伴うトランザクションを含めるよりも多くの報酬を受け取った場合、プロデューサーをブロックする 記憶。上で説明した 𝑝 値は、有理ブロックのパーセンテージとして見ることができます。 ネットワーク内のプロデューサー。「合理的」とは、ペナルティを与える可能性を考慮していない blockchain に対する信頼が低下し、暗号通貨の価値が低下するなどの外部性。 次のコードは、検閲攻撃の実行に使用できる smart contract を示しています。 岩盤の上。この攻撃は、ブロックプロデューサーに賄賂を提供することで、ブロックプロデューサーのインセンティブを悪用します。 州の特定の部分を変更する取引を検閲するため。契約の主な内容 関数、claimBribe を使用すると、ブロックプロデューサーが検閲に成功した場合に賄賂を請求できるようになります。 無効な出力ルートが触れられていないことを確認して、ターゲットのトランザクションを処理します。 functionclaimBribe(バイトメモリ storageProof) 外部 { require(!claimed[block.number], "賄賂はすでに請求されています"); OutputProposal メモリの現在 = storageOracle.getStorage(L2_ORACLE, block.number, SLOT, ストレージプルーフ); require(invalidOutputRoot == current.outputRoot, "攻撃は失敗しました"); 主張[ブロック番号] = true; (ブール送信、 ) = block.coinbase.call{値: 賄賂金額}(""); 4https://etherscan.io/address/0xc662c410c0ecf747543f5ba90660f6abebd9c8c4require(sent, "イー​​サの送信に失敗しました"); } リスト 1: Bedrock に対する検閲攻撃を奨励する契約の例。 紛争期間の長さには、過失の証明が不十分であるという事実も考慮する必要があります。 インタラクティブな証明であるため、参加者が対話するのに十分な時間を提供する必要があります そして、あらゆるやり取りが検閲される可能性があるということです。最後の移動が直前に行われた場合、 紛争期間が終了すると、検閲のコストは大幅に減少します。検閲はあるものの、 ドミナント戦略では、検閲ノードが次の攻撃に対して脆弱であるため、成功の可能性は低くなります。 サービス拒否攻撃: 攻撃者は、次のような非常に複雑なトランザクションを生成する可能性があります。 手数料は支払われないため、欠陥証明の発行は無料で行われます。 極端な場合には、紛争期間が長ければ、解決に成功した場合の調整が可能になります。 フォークを組織し、攻撃しているブロックプロデューサーを排除するための検閲攻撃。もう一つ 攻撃の可能性としては、議論者が検証できる以上に多くのステートルート提案を公開することが挙げられます。 これは周波数制限を使用することで回避できます。 4.1.1.素早い楽観的な出金 オプティミスティック ロールアップの有効性はフル ノードでいつでも検証できるため、 信頼できる oracle を使用すると、出金が安全に完了できるかどうかを L1 で知ることができます。これ このメカニズムは Maker [21] によって最初に提案されました。oracle は引き出しを検証し、 ユーザーに有利子ローンが割り当てられる L1 の結果。これは自動的に実行されます。 7 日間の終わり、つまり実際に出金が完了した時点で締め切りとなります。この解決策 信頼の仮定が導入されていますが、Maker の場合、oracle 演算子があるため最小化されています。 は、融資を提供することでリスクを引き受けるのと同じ組織によって管理されます。 4.2.取引コスト L2 トランザクションのコストは、主に L1 との対話によって決まります。どちらのソリューションでも トランザクションは完全にオフチェーンで実行されるため、トランザクションの計算コストは非常に安価です。 Optimism は、L2 トランザクションの呼び出しデータを呼び出しデータとして公開し、フォルトをほとんど (またはまったく) 実行しません。 したがって、calldata は最も高価なリソースです。 2022 年 1 月 12 日、Bedrock ネットワーク Ethereum の Goerli テストネットで開始されました。ガスの圧縮率を計算できます 一定期間に岩盤上で使用されたガスの量を追跡し、それを過去のガスの量と比較することによって、 対応するブロックの L1 で費やされるガスの量。この方法を使用してガス圧縮 〜20 : 1 の割合が見つかりますが、この数値はメインネット上の実際のアクティビティとは異なる可能性があります。 StarkNet は、L2 状態のすべての変更を呼び出しデータとして Ethereum に公開するため、ストレージは 最も高価なリソース。ネットワークは EVM を使用しないため、トランザクション コストは 圧縮率を自明に見積もることはできません。実行コストと呼び出しデータを想定すると、 無視できるほど、ストレージ書き込みの圧縮率を計算することができます。 L1。コントラクトが展開されておらず、StarkNet で以前にアクセスされていない 10 個のセルが存在すると仮定します。 変更すると、ストレージ書き込みコスト圧縮率は約 24:1 であることがわかります。セルが上書きされた場合 データ公開間の𝑛回、各書き込みのコストは、以前のコストと比較して 1/𝑛 になります。 最後の書き込みのみが公開されるため、1 回の書き込みで済みます。コストをさらに抑えることができるのは、頻繁に使用される値を圧縮します。有効性証明検証の費用は次のとおりに分割されます。 参照するトランザクション: たとえば、StarkNet ブロック 4779 には 200 個のトランザクションが含まれており、その 有効性証明には 267830 ユニットのガス、つまりトランザクションごとに 1339.15 ガスが消費されます。 4.2.1.コールデータの最適化: キャッシュ コントラクト 以下に示すのは、頻繁に使用されるアドレス キャッシュを実装する smart contract です。 ストレージと実行のコストがはるかに低いという事実を利用して対処します リソースとその使用法を示す Friends 契約。後者は、 addFriend関数を呼び出すことで登録できるアドレスの「友達」。住所の場合 すでに少なくとも 1 回使用されている場合は、addFriendWithCache を呼び出すことで追加できます。 機能: キャッシュ インデックスは 4 バイトの整数ですが、アドレスは 20 バイトで表されます。 したがって、関数の引数は 5:1 で節約されます。同じロジックを他のデータにも使用できます 整数やより一般的にはバイトなどの型。 コントラクト AddressCache { マッピング(アドレス => uint32) パブリックアドレス2キー; アドレス[]公開鍵2アドレス; 関数cacheWrite(address _address)内部戻り値(uint32) { require(key2address.length < type(uint32).max, "AddressCache: キャッシュがいっぱいです"); require(address2key[_address] == 0, "AddressCache: アドレスはすでにキャッシュされています"); // 0 は「見つからない」ことを意味するため、キーは 1 から開始する必要があります uint32 キー = uint32(key2address.length + 1); address2key[_address] = キー; key2address.push(_address); リターンキー; } 関数cacheRead(uint32 _key)パブリックビューは(アドレス)を返します{ require(_key <= key2address.length && _key > 0, "アドレスキャッシュ: キーが見つかりません"); キー 2 アドレスを返します [_key - 1]; } } リスト 2: アドレス キャッシュ コントラクト。 コントラクトフレンドはAddressCache { マッピング(アドレス => アドレス[]) 公開友達; 関数 addFriend(アドレス _friend) public { friends[msg.sender].push(_friend); キャッシュ書き込み(_friend); } 関数 addFriendWithCache(uint32 _friendKey) public { friends[msg.sender].push(cacheRead(_friendKey)); } function getFriends() public view returns (address[]memory) { 友達を返す[msg.sender];} } リスト 3: アドレス キャッシュを継承するコントラクトの例。 この契約はキャッシュ内で約 40 億 (232) のアドレスをサポートしており、1 バイトを追加すると次のようになります。 約1兆(240)個。 4.2.2.ストレージの最適化: Bloom のフィルター StarkNet には、ストレージの使用量を最小限に抑えるための手法がいくつかあります。必要がない場合は、 元のデータの可用性を保証する場合は、その hash をオンチェーンに保存するだけで十分です。 ERC-721 (NFT) [22] のデータを保存するために使用されるメカニズムです。つまり、 利用可能な場合はデータの hash。複数回保存されたデータの場合は、ルックアップを使用できます。 Optimism に導入されたキャッシュ システムに似たテーブル。すべての値を次の場所に保存する必要があります。 少なくとも一度は。一部のアプリケーションでは、ブルーム フィルターを使用することですべての値の保存を回避できます。 [23, 24, 25]、つまり、次のことを確実に知ることができる確率的データ構造。 要素はセットに属していませんが、小さいながらも無視できない false の確率を許容します。 ポジティブ。 ブルーム フィルターは、ゼロの 𝑚 ビットの配列として初期化されます。要素を追加するには、𝑘hash 関数を使用します 一様なランダム分布を持つものが使用され、それぞれが設定された配列のビットにマッピングされます。 要素がセットに属しているかどうかを確認するには、𝑘hash 関数を実行して検証します。 単純なブルームフィルターでは、𝑘ビットが1に設定されているかどうかを区別する方法はありません。 要素が実際にセットに属しているか、偽陽性であるか、その確率は数に応じて増加します。 エントリ数が増加します。 𝑛要素を挿入した後: P[偽陽性] = (︃ 1 − [︂ 1 −1 𝑚 ]︂𝑘𝑛)︃𝑘 ≈ (︁ 1 −𝑒−𝑘𝑛/𝑚)︁𝑘 各ビットセットの確率が独立していると仮定します。 𝑛要素 (任意のサイズ!) が が含まれることが期待され、許容される偽陽性の確率は配列のサイズ 𝑝 です。 は次のように計算できます。 𝑚= −𝑛ln 𝑝 (ln 2)2 hash 関数の最適な数は次のとおりです。 𝑘= 𝑚 𝑛ln 2 許容誤差 1% で 1000 個の要素を挿入すると仮定すると、配列のサイズは 9585 ビットになります。 𝑘= 6 の場合、0.1% の許容誤差の場合、𝑘= 9 では 14377 ビットになります。要素が 100 万個の場合 が挿入されることが予想される場合、配列のサイズは 1% の場合は約 1170 KB、1% の場合は 1775 KB になります。 𝑝[26] のみに依存するため、𝑘 の値が同じ場合は 0.1%。 すでに挑戦した相手にプレイヤーを割り当ててはいけないゲームでは、 各プレイヤーの過去の対戦相手のリストをストレージに保存する代わりに、ブルームを使用できます。 フィルター。一部のプレイヤーに挑戦しないリスクは多くの場合許容され、フィルターはリセットできます。 定期的に。4.3. Ethereum 互換性 EVM および Ethereum と互換性があることの主な利点は、利用可能なすべてのコンポーネントを再利用できることです。 ツール。 Ethereum smart contract は、変更を加えずに Optimism で公開できます。 新しい監査。ウォレットの互換性維持、開発および静的分析ツール、一般的な分析 ツール、インデックス作成ツール、oracle。 Ethereum と Solidity には、十分に研究されてきた長い歴史があります。 再入攻撃、オーバーフローとアンダーフロー、フラッシュ ローン、oracle などの脆弱性 操作。このため、Optimism は短期間で大量の価値を獲得することができました。 時間。 別の仮想マシンを採用するという選択は、エコシステム全体を再構築する必要があることを意味します。 実装の自由度が高まるという利点があります。 StarkNet アカウントをネイティブに実装します 抽象化。各アカウントを smart contract として実装できるメカニズムです。 インターフェイスに準拠している限り、任意のロジック (したがって抽象化という用語が使われます): これにより、 さまざまなデジタル署名スキームの使用、秘密キーを使用して秘密キーを変更する機能 同じアドレスを使用するか、マルチシグを使用します。 Ethereum コミュニティがこれの導入を提案しました 2020 年に EIP-2938 のメカニズムが確立されましたが、この提案は 1 年以上古いままでした。 他の更新には、[27] の方が優先されます。 互換性から得られるもう 1 つの重要な利点は、既存のクライアントの再利用です: Optimism は、わずか約 800 行の違いがある独自のノードに geth のバージョンを使用します。 2014 年以来、開発、テスト、保守が行われています。堅牢なクライアントを持つことが重要です。 ネットワーク内で何が有効か無効として受け入れられるか。フォールトプルーフの実装におけるバグ システムにより、間違った証明が正しい証明として受け入れられたり、無効な証明が正しい証明として受け入れられたりする可能性があります。 ブロックが不正なものとして受け入れられ、システムが危険にさらされる可能性があります。このタイプの可能性は より幅広いクライアントの多様性により攻撃を制限できます: Optimism は取得に加えて再利用できます。 他の Ethereum クライアントはすでに保守されており、別の Erigon ベースのクライアントの開発が行われています。 すでに進行中です。 2016 年に、geth のメモリ管理の問題が悪用されました。 DoS 攻撃と防御の第一線は、2 番目に多いパリティの使用を推奨することでした。 当時使用されていたクライアント 5. StarkNet は有効性証明に関して同じ問題に直面していますが、クライアントは スクラッチから作成する必要があり、証明システムははるかに複雑になり、その結果、 また、正確性を保証するのははるかに複雑です。

Conclusión

  1. Conclusión Los rollups son la solución más prometedora disponible en la actualidad para resolver el problema de escalabilidad en blockchains descentralizados, allanando el camino para la era de los blockchains modulares en lugar de monolítico blockchains. Se muestra principalmente la elección de desarrollar un resumen optimista o un resumen de validez. como un equilibrio entre complejidad y agilidad. StarkNet tiene numerosas ventajas como la rapidez retiros, incapacidad estructural para tener transiciones de estado inválidas, menor costo de transacción en el a expensas de un período de desarrollo más largo e incompatibilidad con EVM, mientras que Optimism tiene aprovechó la economía de red para ganar rápidamente una porción importante del mercado. Optimism Bedrock, sin embargo, posee un diseño modular que le permite convertirse en Validity 5https://blog.ethereum.org/2016/09/22/ethereum-network-currently-undergoing-dos-attack

Resumen en el futuro: Cannon actualmente usa minigeth compilado en MIPS para su prueba de fallas sistema, pero se puede utilizar la misma arquitectura para obtener un circuito y producir pruebas de validez. Compilar una máquina compleja como la EVM para una microarquitectura resulta en una solución más simple. circuito que no necesita ser modificado y reverificado en caso de actualizaciones. RISC Cero es un microarquitectura verificable con pruebas STARK ya en desarrollo basadas en RISC-V que se puede utilizar para este propósito como alternativa a MIPS [28]. Un aspecto que no debe subestimarse es la complejidad para entender cómo funciona el La tecnología funciona. Una fortaleza de los blockchain tradicionales es poder verificar el estado de el blockchain sin confiar en ninguna entidad de terceros. Sin embargo, en el caso de StarkNet, es necesario confiar en la implementación cuando no es posible verificar los distintos componentes basado en criptografía y matemáticas avanzadas. Inicialmente esto puede crear fricción para el adopción de la tecnología, pero a medida que las herramientas y el uso de pruebas de integridad avanzan aún más fuera del campo blockchain, es de esperar que este problema se resuelva.

結論

  1. 結論 ロールアップは、スケーラビリティの問題を解決するために現在利用できる最も有望なソリューションです。 分散型 blockchain は、モジュール型 blockchain の時代への道を開きます。 モノリシックblockchain。 主に、楽観的ロールアップまたは妥当性ロールアップのどちらを開発するかの選択が示されています。 複雑さと機敏性の間のトレードオフとして。 StarkNet には、高速などの多くの利点があります。 引き出し、無効な状態遷移が構造的に不可能であること、取引コストが低いこと 開発期間が長くなり、EVM との互換性がないため、Optimism は ネットワーク経済を活用して、市場で急速に大きなシェアを獲得しました。 Optimism ただし、Bedrock は、Validity になることを可能にするモジュラー設計を備えています。 5https://blog.ethereum.org/2016/09/22/ethereum-network-currently-undergoing-dos-attack

将来のロールアップ: Cannon は現在、フォールトプルーフのために MIPS にコンパイルされた minigeth を使用しています システムですが、同じアーキテクチャを使用して回路を取得し、有効性証明を作成することができます。 EVM などの複雑なマシンをマイクロアーキテクチャ用にコンパイルすると、より単純になります。 アップグレードの場合に回路を変更したり再検証したりする必要がありません。 RISCゼロは、 RISC-V に基づいてすでに開発中の STARK 証明を備えた検証可能なマイクロアーキテクチャ MIPS [28] の代わりに、この目的に使用できます。 過小評価すべきではない側面の 1 つは、どのようにして、 テクノロジーは機能します。従来の blockchain の強みは、状態を確認できることです。 第三者エンティティを信頼せずに blockchain を実行します。ただし、StarkNet の場合は、 さまざまなコンポーネントを検証できない場合に実装を信頼する必要がある 暗号化と高度な数学に基づいています。これにより、最初は摩擦が生じる可能性があります。 テクノロジーの導入は進んでいますが、完全性証明のツールと使用法が進歩するにつれて、 blockchain フィールドの外では、この問題は解決されることが期待されます。