Documentação Técnica Optimism

Von Optimism Collective · 2021

Optimism verfügt über kein traditionelles Whitepaper. Als Ethereum-Layer-2-Optimistic-Rollup sind sein Design und seine Spezifikationen durch technische Dokumentation, die OP-Stack-Spezifikation und Forschungsbeiträge dokumentiert, nicht durch ein einzelnes formales wissenschaftliches Paper.

Zusammenfassung

Das Papier befasst sich mit dem Problem der Skalierbarkeit in dezentralen blockchains, indem es den Kompromiss zwischen Transaktionsdurchsatz und Hardwareanforderungen zum Betrieb eines Knotens analysiert. Rollups, also Technologien zur On-Chain-Verifizierung von außerhalb der Kette ausgeführten Blöcken, werden in Form von Fehler- oder Gültigkeitsnachweisen dargestellt. Wir vergleichen Optimistic Rollups und Validity Rollups im Hinblick auf Auszahlungszeit, Transaktionskosten, Optimierungstechniken und Kompatibilität mit dem Ethereum-Ökosystem. Unsere Analyse zeigt, dass Optimism Bedrock derzeit eine Gaskomprimierungsrate von etwa 20:1 aufweist, während StarkNet eine Speicherschreibkosten-Komprimierungsrate von etwa 24:1 erreicht. Wir diskutieren auch Techniken zur weiteren Optimierung dieser Raten, wie zum Beispiel die Verwendung von Cache-Verträgen und Bloom-Filtern. Letztendlich verdeutlichen unsere Schlussfolgerungen die Kompromisse zwischen Komplexität und Agilität bei der Wahl zwischen Optimistic Rollups und Validity Rollups. Schlüsselwörter Blockchain, Skalierbarkeit, Rollup 1. Einführung Die Blockchain-Technologie hat aufgrund ihres Potenzials, verschiedene Branchen zu revolutionieren, große Aufmerksamkeit erlangt. Allerdings bleibt die Skalierbarkeit eine große Herausforderung, da die meisten blockchains mit einem Kompromiss zwischen Skalierbarkeit, Dezentralisierung und Sicherheit konfrontiert sind, der allgemein als Skalierbarkeitstrilemma bezeichnet wird [1, 2]. Um den Durchsatz eines blockchain zu erhöhen, besteht eine triviale Lösung darin, seine Blockgröße zu erhöhen. Im Zusammenhang mit Ethereum bedeutet dies eine Erhöhung der maximalen Gasmenge, die ein Block aufnehmen kann. Da jeder vollständige Knoten jede Transaktion jedes Blocks validieren muss, steigen mit zunehmendem Durchsatz auch die Hardwareanforderungen, was zu einer stärkeren Zentralisierung des Netzwerks führt. Einige blockchains, wie zum Beispiel Bitcoin und Ethereum, optimieren ihr Design, um ihre architektonische Dezentralisierung zu maximieren, während andere, wie zum Beispiel die Binance Smart Chain und Solana, so konzipiert sind, dass sie so schnell und günstig wie möglich sind. Dezentrale Netzwerke begrenzen künstlich den Durchsatz des blockchain, um die Hardwareanforderungen für die Teilnahme am Netzwerk zu senken. Im Laufe der Jahre wurden Versuche unternommen, eine Lösung für das Trilemma zu finden, beispielsweise mit den staatlichen Kanälen [3] und Plasma [4, 5]. Diese Lösungen zeichnen sich dadurch aus, dass sie einige Aktivitäten außerhalb der Kette verlagern, On-Chain-Aktivitäten mit Off-Chain-Aktivitäten mithilfe von smart contracts verknüpfen und DLT 2023 verifizieren: 5. Distributed Ledger Technology Workshop, 25.–26. Mai 2023, Bologna, Italien $ [email protected] (L. Donno) https://lucadonnoh.github.io/ (L. Donno) 0000-0001-9221-3529 (L. Donno) © 2023 Das Urheberrecht für dieses Papier liegt bei den Autoren. Die Nutzung ist unter der Creative Commons-Lizenz Namensnennung 4.0 International (CC BY 4.0) gestattet. CEUR Workshop Proceedings http://ceur-ws.org ISSN 1613-0073 CEUR Workshop Proceedings (CEUR-WS.org) On-Chain, was außerhalb der Chain passiert. Sowohl Plasma- als auch Staatskanäle unterstützen jedoch nur begrenzt allgemeine smart contracts. Rollups sind blockchains (genannt Layer 2 oder L2), die ihre Blöcke auf einem anderen blockchain (Layer 1 oder L1) veröffentlichen und daher dessen Konsens-, Datenverfügbarkeits- und Sicherheitseigenschaften erben. Im Gegensatz zu anderen Lösungen unterstützen sie willkürliche Berechnungen. Rollups bestehen aus drei Hauptkomponenten: • Sequenzer: Knoten, die Rollup-Transaktionen von Benutzern empfangen und sie in einem Block zusammenfassen, der an Layer 1 gesendet wird. Der Block besteht mindestens aus der Statuswurzel (z. B. einer Merkle-Wurzel) und den Daten, die zur Rekonstruktion und Validierung des Status erforderlich sind. Der Layer 1 definiert die...

Resumo

O artigo aborda o problema de escalabilidade em blockchains descentralizados analisando a compensação entre o rendimento da transação e os requisitos de hardware para executar um nó. Rollups, ou seja, tecnologias para verificação on-chain de blocos executados fora da cadeia, são apresentados na forma de provas de falha ou de validade. Comparamos Rollups Otimistas e Rollups de Validade em relação ao tempo de retirada, custos de transação, técnicas de otimização e compatibilidade com o ecossistema Ethereum. Nossa análise revela que Optimism Bedrock atualmente tem uma taxa de compressão de gás de aproximadamente 20:1, enquanto StarkNet atinge uma taxa de compressão de custo de gravação de armazenamento de cerca de 24:1. Também discutimos técnicas para otimizar ainda mais essas taxas, como o uso de contratos de cache e filtros Bloom. Em última análise, as nossas conclusões destacam os compromissos entre complexidade e agilidade na escolha entre rollups otimistas e de validade. Palavras-chave Blockchain, Escalabilidade, Rollup 1. Introdução A tecnologia Blockchain ganhou atenção significativa devido ao seu potencial para revolucionar vários setores. No entanto, a escalabilidade continua a ser um grande desafio, já que a maioria dos blockchains enfrentam um compromisso entre escalabilidade, descentralização e segurança, comumente referido como o Trilema da Escalabilidade [1, 2]. Para aumentar o rendimento de um blockchain, uma solução trivial é aumentar o tamanho do bloco. No contexto de Ethereum, isso significa aumentar a quantidade máxima de gás que um bloco pode conter. Como cada nó completo deve validar todas as transações de cada bloco, à medida que o rendimento aumenta, os requisitos de hardware também aumentam, levando a uma maior centralização da rede. Alguns blockchains, como Bitcoin e Ethereum, otimizam seu design para maximizar sua descentralização arquitetônica, enquanto outros, como Binance Smart Chain e Solana, são projetados para serem o mais rápidos e baratos possível. As redes descentralizadas limitam artificialmente o rendimento do blockchain para reduzir os requisitos de hardware para participar da rede. Ao longo dos anos, foram feitas tentativas para encontrar uma solução para o Trilema, como os canais estaduais [3] e Plasma [4, 5]. Essas soluções têm a característica de mover algumas atividades para fora da cadeia, vincular atividades on-chain a atividades fora da cadeia usando smart contracts e verificar DLT 2023: 5th Distributed Ledger Technology Workshop, 25 a 26 de maio de 2023, Bolonha, Itália $ [email protected] (L. Donno) https://lucadonnoh.github.io/ (L. Donno) 0000-0001-9221-3529 (L. Donno) © 2023 Direitos autorais deste artigo de seus autores. Uso permitido sob Creative Commons License Attribution 4.0 International (CC BY 4.0). Procedimentos do Workshop CEUR http://ceur-ws.org ISSN 1613-0073 Procedimentos do Workshop CEUR (CEUR-WS.org) na rede o que está acontecendo fora da rede. No entanto, os canais de plasma e de estado são limitados no suporte a smart contracts gerais. Rollups são blockchains (chamados Layer 2 ou L2) que publicam seus blocos em outro blockchain (Layer 1 ou L1) e, portanto, herdam seu consenso, disponibilidade de dados e propriedades de segurança. Elas, ao contrário de outras soluções, suportam computação arbitrária. Rollups possuem três componentes principais: • Sequenciadores: nós que recebem transações Rollup de usuários e as combinam em um bloco que é enviado para Layer 1. O bloco consiste em pelo menos a raiz do estado (por exemplo, uma raiz Merkle) e os dados necessários para reconstruir e validar o estado. O Layer 1 define o...

Einführung

  1. Einführung Aufgrund ihres revolutionären Potenzials hat die Blockchain-Technologie große Aufmerksamkeit erlangt verschiedene Branchen. Allerdings bleibt die Skalierbarkeit eine große Herausforderung, vor der die meisten blockchains stehen ein Kompromiss zwischen Skalierbarkeit, Dezentralisierung und Sicherheit, der allgemein als bezeichnet wird Skalierbarkeitstrilemma [1, 2]. Um den Durchsatz eines blockchain zu erhöhen, gibt es eine triviale Lösung um seine Blockgröße zu erhöhen. Im Kontext von Ethereum bedeutet dies eine Erhöhung des Maximums Menge an Gas, die ein Block aufnehmen kann. Da jeder vollständige Knoten jede Transaktion von jedem validieren muss Block: Mit zunehmendem Durchsatz steigen auch die Hardwareanforderungen, was zu einem höheren Durchsatz führt Zentralisierung des Netzwerks. Einige blockchains, wie Bitcoin und Ethereum, optimieren ihre Design, um ihre architektonische Dezentralisierung zu maximieren, während andere, wie der Binance Smart Chain und Solana sind darauf ausgelegt, so schnell und günstig wie möglich zu sein. Dezentrale Netzwerke Beschränken Sie den Durchsatz von blockchain künstlich, um die Hardwareanforderungen zu senken am Netzwerk teilnehmen. Im Laufe der Jahre wurde versucht, eine Lösung für das Trilemma zu finden, beispielsweise staatliche Kanäle [3] und Plasma [4, 5]. Diese Lösungen haben die Eigenschaft, bestimmte Aktivitäten zu verschieben Off-Chain, Verknüpfung von On-Chain-Aktivitäten mit Off-Chain-Aktivitäten mithilfe von smart contracts und Überprüfung DLT 2023: 5. Distributed Ledger Technology Workshop, 25.–26. Mai 2023, Bologna, Italien $ [email protected] (L. Donno) https://lucadonnoh.github.io/ (L. Donno) 0000-0001-9221-3529 (L. Donno) © 2023 Das Urheberrecht für dieses Papier liegt bei den Autoren. Die Nutzung ist unter der Creative Commons-Lizenz Namensnennung 4.0 International (CC BY 4.0) gestattet. CEUR Werkstatt Verfahren http://ceur-ws.org ISSN 1613-0073 CEUR-Workshop-Beiträge (CEUR-WS.org)On-Chain, was außerhalb der Kette passiert. Allerdings sind sowohl Plasma- als auch Zustandskanäle begrenzt ihre Unterstützung allgemeiner smart contracts. Rollups sind blockchains (genannt Layer 2 oder L2), die ihre Blöcke auf einem anderen blockchain veröffentlichen. (Layer 1 oder L1) und erben daher dessen Konsens-, Datenverfügbarkeits- und Sicherheitseigenschaften. Sie, Im Gegensatz zu anderen Lösungen unterstützen sie beliebige Berechnungen. Rollups bestehen aus drei Hauptkomponenten: • Sequenzer: Knoten, die Rollup-Transaktionen von Benutzern empfangen und diese zu einem zusammenfassen Block, der an Layer 1 gesendet wird. Der Block besteht mindestens aus der Staatswurzel (z. B. einem Merkle root) und die Daten, die zur Rekonstruktion und Validierung des Status erforderlich sind. Der Layer 1 definiert die kanonischer blockchain des L2 durch Festlegen der Reihenfolge der veröffentlichten Daten. • Vollständige Rollup-Knoten: Knoten, die Rollup-Blöcke vom Layer abrufen, verarbeiten und validieren 1, indem Sie überprüfen, ob der Stamm korrekt ist. Wenn ein Block ungültige Transaktionen enthält, ist dies der Fall verworfen, was verhindert, dass Sequenzer gültige Blöcke erstellen, die ungültige enthalten Transaktionen. • Rollup-Light-Knoten: Knoten, die Rollup-Blöcke von Layer 1 erhalten, aber keine Berechnungen durchführen der neue Staat selbst. Mithilfe von Techniken überprüfen sie, ob die neue Statuswurzel gültig ist wie etwa Fehler- oder Gültigkeitsnachweise. Rollups erreichen Skalierbarkeit, indem sie die fortgeführten Anschaffungskosten der Transaktionen als Anzahl verringern der Nutzer steigt. Dies liegt daran, dass die Kosten für die Sicherstellung der Gültigkeit von blockchain sublinear ansteigen in Bezug auf die Kosten für die individuelle Überprüfung von Transaktionen. Rollups unterscheiden sich je nach der Mechanismus, mit dem sie die Gültigkeit der Transaktionsausführung an Light Nodes sicherstellen: in Optimistische Rollups werden durch ein Wirtschaftsmodell und durch Fehlernachweise gewährleistet, während die Gültigkeit gewährleistet ist Bei Rollups erfolgt die kryptografische Absicherung durch Gültigkeitsnachweise. Leichte Knoten können als smart contracts auf Layer 1 implementiert werden. Sie akzeptieren die Wurzel des neuen Zustand und überprüfen Gültigkeit oder Fehlernachweise: Diese Rollups werden daher Smart Contract genannt Rollups. Wenn Light Nodes unabhängig sind, werden sie Sovereign Rollups [6] genannt. Der Vorteil von Die Verwendung eines Smart Contract Rollups besteht darin, eine vertrauensminimierte Brücke zwischen beiden bauen zu können blockchains: Da die Gültigkeit des L2-Zustands auf L1 bewiesen ist, entsteht ein System von Transaktionen L2 bis L1 können implementiert werden, was Abhebungen ermöglicht. Der Nachteil besteht darin, dass die Kosten dafür Transaktionen hängen von den Kosten für die Überprüfung des Status auf L1 ab: wenn die Basisschicht gesättigt ist Bei anderen Aktivitäten steigen auch die Kosten für Transaktionen im Rollup. Die Daten- und Konsensebene bestimmt die Sicherheit des Systems Sie legen die Reihenfolge von Transaktionen fest, verhindern Angriffe und stellen Daten zum Nachweis des Staates zur Verfügung Gültigkeit. Papierbeitrag In diesem Artikel untersuchen wir Optimistic und Validity Rollups, zwei innovative Lösungen für das Skalierbarkeitstrilemma, mit Schwerpunkt auf bemerkenswerten Implementierungen wie Optimism Bedrock und StarkNet. Unsere Beiträge beinhalten einen umfassenden Vergleich dieser Lösungen, eine Analyse der Auszahlungszeiten und eine Diskussion eines möglichen Angriffs auf Optimism Grundgestein. Darüber hinaus berechnen wir deren Gasverdichtungsverhältnisse, liefern anwendungsspezifische Optimierungen und stellen die Vor- und Nachteile einer Abkehr vom Ethereum dar. Virtuelle Maschine (EVM).

Papierstruktur Der Aufsatz ist wie folgt aufgebaut. In Abschnitt 2 sind optimistische Rollups eingeführt durch die Analyse von Optimism Grundgestein. In Abschnitt 3 werden Validity Rollups vorgestellt Analyse von StarkNet. In Abschnitt 4 vergleichen wir die beiden Lösungen. Abschließend zeichnen wir in Abschnitt 5 einige Schlussfolgerungen.

Introdução

  1. Introdução A tecnologia Blockchain ganhou atenção significativa devido ao seu potencial para revolucionar diversas indústrias. No entanto, a escalabilidade continua a ser um grande desafio, uma vez que a maioria dos blockchains enfrentam um compromisso entre escalabilidade, descentralização e segurança, comumente referido como o Trilema de escalabilidade [1, 2]. Para aumentar o rendimento de um blockchain, uma solução trivial é para aumentar o tamanho do bloco. No contexto de Ethereum, isso significa aumentar o máximo quantidade de gás que um bloco pode conter. Como cada nó completo deve validar todas as transações de cada bloco, à medida que a taxa de transferência aumenta, os requisitos de hardware também aumentam, levando a um maior centralização da rede. Alguns blockchains, como Bitcoin e Ethereum, otimizam seus design para maximizar sua descentralização arquitetônica, enquanto outros, como o Binance Smart Chain e Solana são projetados para serem o mais rápidos e baratos possíveis. Redes descentralizadas limitar artificialmente o rendimento do blockchain para reduzir os requisitos de hardware para participar da rede. Ao longo dos anos, foram feitas tentativas para encontrar uma solução para o Trilema, tais como medidas estatais canais [3] e Plasma [4, 5]. Estas soluções têm a característica de movimentar alguma atividade fora da cadeia, vinculando a atividade na cadeia à atividade fora da cadeia usando smart contracts e verificando DLT 2023: 5º Workshop de Tecnologia de Ledger Distribuído, 25 a 26 de maio de 2023, Bolonha, Itália $ [email protected] (L. Donno) https://lucadonnoh.github.io/ (L. Donno) 0000-0001-9221-3529 (L. Donno) © 2023 Direitos autorais deste artigo de seus autores. Uso permitido sob Creative Commons License Attribution 4.0 International (CC BY 4.0). CEUR Oficina Processos http://ceur-ws.org ISSN 1613-0073 Anais do Workshop CEUR (CEUR-WS.org)na cadeia o que está acontecendo fora da cadeia. No entanto, tanto os canais de plasma quanto os de estado são limitados em seu apoio aos smart contracts gerais. Rollups são blockchains (chamados Layer 2 ou L2) que publicam seus blocos em outro blockchain (Layer 1 ou L1) e, portanto, herda seu consenso, disponibilidade de dados e propriedades de segurança. Eles, ao contrário de outras soluções, suporta computação arbitrária. Os rollups têm três componentes principais: • Sequenciadores: nós que recebem transações Rollup dos usuários e as combinam em um bloco que é enviado para Layer 1. O bloco consiste em pelo menos a raiz do estado (por exemplo, um Merkle root) e os dados necessários para reconstruir e validar o estado. O Layer 1 define o canônico blockchain do L2 estabelecendo a ordenação dos dados publicados. • Nós completos de rollup: nós que obtêm, processam e validam blocos de rollup da camada 1 verificando se a raiz está correta. Se um bloco contém transações inválidas, então descartado, o que impede que os sequenciadores criem blocos válidos que incluam blocos inválidos transações. • Nós light de rollup: nós que obtêm blocos de rollup de Layer 1, mas não calculam o novo estado eles mesmos. Eles verificam se a nova raiz de estado é válida usando técnicas como provas de culpa ou validade. Os rollups alcançam escalabilidade diminuindo o custo amortizado das transações conforme o número de usuários aumenta. Isso ocorre porque o custo para garantir a validade de blockchain cresce sublinearmente no que diz respeito ao custo de verificação individual das transações. Os rollups diferem de acordo com o mecanismo pelo qual eles garantem a validade da execução da transação em nós leves: em Rollups Otimistas são garantidos por um modelo econômico e por provas de falhas, enquanto em Validade Rollups são garantidos criptograficamente usando provas de validade. Os nós leves podem ser implementados como smart contracts em Layer 1. Eles aceitam a raiz do novo estado e verificar a validade ou provas de falha: esses Rollup são, portanto, chamados de Contrato Inteligente Acumulações. Se os nós leves forem independentes, eles serão chamados de Rollups Soberanos [6]. A vantagem de usar um Smart Contract Rollup é ser capaz de construir uma ponte com confiança minimizada entre os dois blockchains: como a validade do estado L2 é comprovada para L1, um sistema de transações de L2 a L1 podem ser implementados, permitindo saques. A desvantagem é que o custo do transações depende do custo de verificação do estado em L1: se a camada base estiver saturada por outras atividades, o custo das transações no Rollup também aumenta. As camadas de dados e de consenso são as que determinam a segurança do sistema como eles definem a ordem das transações, evitam ataques e disponibilizam dados para comprovar o estado validade. Contribuição em papel Neste artigo, estudamos Optimistic e Validity Rollups, dois inovadores soluções para o Trilema de Escalabilidade, com foco em implementações notáveis, como Optimism Bedrock e StarkNet. Nossas contribuições incluem uma comparação abrangente desses soluções, uma análise dos tempos de retirada e uma discussão sobre um possível ataque a Optimism Base rochosa. Além disso, calculamos suas taxas de compressão de gás, fornecemos otimizações específicas da aplicação e apresentamos as vantagens e desvantagens de se afastar do Ethereum Máquina Virtual (EVM).

Estrutura do papel O artigo está organizado da seguinte forma. Na seção 2, Rollups otimistas são introduzido pela análise de Optimism Bedrock. Na seção 3, os Rollups de Validade são introduzidos por analisando StarkNet. Na seção 4 comparamos as duas soluções. Finalmente, na seção 5 desenhamos algumas conclusões.

Optimistische Rollups

  1. Optimistische Rollups Die Idee, die Ausgabe von Blöcken optimistisch zu akzeptieren, ohne ihre Ausführung zu überprüfen, ist bereits im Whitepaper Bitcoin [7] enthalten, in dem es um Lichtknoten geht. Diese Knoten folgen nur die Header-Kette durch Überprüfung der Konsensregel, wodurch sie anfällig für die Annahme von Blöcken werden enthält ungültige Transaktionen im Falle eines 51 %-Angriffs. Nakamoto schlägt vor, dieses Problem zu lösen Problem, indem ein „Warnsystem“ verwendet wird, um Light-Knoten zu warnen, dass ein Block ungültige Transaktionen enthält. Dieser Mechanismus wurde erstmals von Al-Bassam, Sonnino und Buterin [8] in dem ein Fehler implementiert wurde Es wird ein Proofsystem verwendet, das auf den Fehlerkorrekturcodes [9] basiert. Um die Erstellung von zu ermöglichen Für Fehlernachweise ist es erforderlich, dass die Daten aller Blöcke, einschließlich ungültiger Blöcke, verfügbar sind das Netzwerk: Dies ist das Datenverfügbarkeitsproblem, das mithilfe probabilistischer Daten gelöst wird Probenahmemechanismus. Das erste Optimistic Rollup-Design wurde von John Adler und vorgestellt Mikerah Quintyne-Collins im Jahr 2019 [10], in dem Blöcke auf einem anderen blockchain veröffentlicht werden Das definiert ihren Konsens über die Bestellung. 2.1. Optimism Grundgestein Bedrock [11] ist die neueste Version von Optimism, einem Smart Contract Rollup. Die vorherige Version, Für die Optimistic Virtual Machine (OVM) war ein Ad-hoc-Compiler erforderlich, um Solidity in sie zu kompilieren Eigener Bytecode: Im Gegensatz dazu entspricht Bedrock in Bezug auf die Ausführungs-Engine vollständig dem EVM folgt der Ethereum Yellow Paper-Spezifikation [12]. 2.1.1. Einlagen Benutzer können Transaktionen über einen Vertrag auf Ethereum, dem Optimism-Portal, einzahlen, indem sie die Funktion „depositTransaction“ aufrufen. Wenn eine Transaktion ausgeführt wird, a Das TransactionDeposited-Ereignis wird ausgegeben, auf dessen Verarbeitung jeder Knoten im Rollup wartet Einlagen. Eine hinterlegte Transaktion ist eine L2-Transaktion, die von L1 abgeleitet ist. Wenn der Anrufer der Funktion ist ein Vertrag, die Adresse wird transformiert, indem ihr ein konstanter Wert hinzugefügt wird: Dies verhindert Angriffe, bei denen ein Vertrag auf L1 dieselbe Adresse wie ein Vertrag auf L2, aber einen anderen Code hat. Die Aufnahme einer hinterlegten Transaktion auf L2 wird durch die Spezifikation innerhalb einer Sequenzierung sichergestellt Fenster. Hinterlegte Transaktionen sind ein neuer EIP-2718-kompatibler Transaktionstyp [13] mit dem Präfix 0x7E. wobei die RLP-codierten Felder sind: • bytes32 sourceHash: hash, der die Quelle der Transaktion eindeutig identifiziert. • Adresse von: die Adresse des Absenders. • Adresse an: die Empfängeradresse oder die Nulladresse, wenn es sich bei der hinterlegten Transaktion um eine handelt Vertragserstellung.• uint256 mint: der Wert, der auf L2 erstellt werden soll. • uint256-Wert: der an den Empfänger zu sendende Wert. • Byte-Daten: die Eingabedaten. • Bytes gasLimit: das Gaslimit der Transaktion. Der sourceHash wird als keccak256 hash des L1-Blocks hash und des L1-Protokolls berechnet Index, der ein Ereignis in einem Block eindeutig identifiziert. Da hinterlegte Transaktionen auf L1 initiiert, aber auf L2 ausgeführt werden, benötigt das System eine Mechanismus, um L1 für das auf L2 ausgegebene Gas zu bezahlen. Eine Lösung besteht darin, ETH über das Portal zu senden. Dies bedeutet jedoch, dass jeder Anrufer (auch indirekte Anrufer) als zahlbar gekennzeichnet werden muss, und das ist auch der Fall ist bei vielen bestehenden Projekten nicht möglich. Die Alternative besteht darin, das entsprechende Gas auf L1 zu verbrennen. Das der hinterlegten Transaktion zugewiesene Gas wird als garantiertes Gas bezeichnet. Der L2-Gaspreis an L1 wird nicht automatisch synchronisiert, sondern mithilfe eines Mechanismus ähnlich EIP-1559 geschätzt [14]. Die maximale garantierte Gasmenge pro Ethereum-Block beträgt 8 Millionen, mit einem Ziel von 2 Millionen. Die Menge 𝑐an ETH, die zum Bezahlen von Gas auf L2 erforderlich ist, beträgt 𝑐= 𝑔𝑏L2, wobei 𝑏L2 ist Grundgebühr auf L2. Der Vertrag auf L1 verbrennt eine Gasmenge, die 𝑐/𝑏L2 entspricht. Das ausgegebene Gas zum Anrufen EinzahlungTransaktion wird auf L2 erstattet: Wenn dieser Betrag größer ist als das garantierte Gas, Es wird kein Gas verbrannt. Die erste Transaktion eines rollup-Blocks ist eine hinterlegte Transaktion mit L1-Attributen, die zur Registrierung verwendet wird Stellen Sie auf einem L2 die Attribute von Ethereum-Blöcken vorab bereit. Die Attribute, die das Predeploy bereitstellt Zugriff auf sind die Blocknummer, der Zeitstempel, die Grundgebühr, der Block hash und die Reihenfolge Zahl, die die Blocknummer von L2 relativ zum zugehörigen L1-Block (auch Epoche genannt) ist; Diese Zahl wird zurückgesetzt, wenn eine neue Epoche beginnt. 2.1.2. Sequenzierung Die Rollup-Knoten leiten die Kette Optimism vollständig von Ethereum ab. Diese Kette wird verlängert Jedes Mal, wenn neue Transaktionen auf L1 veröffentlicht werden, werden die Blöcke jedes Mal neu organisiert Ethereum Blöcke werden neu organisiert. Der Rollup blockchain ist in Epochen unterteilt. Für jeden 𝑛 Blocknummer Ethereum, es gibt eine entsprechende 𝑛Epoche. Jede Epoche enthält mindestens eine Block, und jeder Block in einer Epoche enthält eine hinterlegte Transaktion mit L1-Attributen. Der erste Block in einer Epoche enthält alle über das Portal hinterlegten Transaktionen. Layer 2-Blöcke können ebenfalls vorhanden sein enthielt sequenzierte Transaktionen, d. h. Transaktionen, die direkt an den Sequencer gesendet wurden. Der Sequencer akzeptiert Transaktionen von Benutzern und erstellt Blöcke. Für jeden Block wird konstruiert ein Stapel, der am Ethereum veröffentlicht werden soll. Mehrere Chargen können komprimiert veröffentlicht werden, den Namenskanal übernehmen. Ein Kanal kann in mehrere Frames unterteilt werden, falls er zu groß ist eine einzelne Transaktion. Ein Kanal wird als Komprimierung mit ZLIB [15] von rlp-encoded definiert Chargen. Die Felder eines Stapels sind die Epochennummer, die Epoche hash, die übergeordnete hash, die Zeitstempel und die Transaktionsliste. Ein durch eine Epoche identifiziertes Sequenzierungsfenster enthält eine feste Anzahl aufeinanderfolgender L1 Blöcke, die ein Ableitungsschritt als Eingabe verwendet, um eine variable Anzahl von L2-Blöcken zu erstellen. Für Epoche 𝑛, das Sequenzierungsfenster 𝑛enthält die Blöcke [𝑛, 𝑛+𝑤). Dies impliziert, dass die Bestellung Die Anzahl der L2-Transaktionen und -Blöcke innerhalb eines Sequenzierungsfensters wird erst am Ende des Fensters festgelegt. Eine rollup-Transaktion wird als sicher bezeichnet, wenn der Batch, der sie enthält, auf L1 bestätigt wurde. Rahmenwerden aus L1-Blöcken gelesen, um Stapel zu rekonstruieren. Die aktuelle Implementierung erlaubt dies nicht Die Dekomprimierung eines Kanals beginnt, bis alle entsprechenden Frames empfangen wurden. Ungültig Chargen werden ignoriert. Aus den Batches werden einzelne Blocktransaktionen gewonnen Wird von der Ausführungs-Engine verwendet, um Statusübergänge anzuwenden und den Rollup-Status zu erhalten. 2.1.3. Auszahlungen Um Abhebungen zu verarbeiten, ist ein L2-zu-L1-Nachrichtensystem implementiert. Ethereum muss den Status von L2 kennen, um Abhebungen zu akzeptieren, und dies geschieht durch Veröffentlichung auf der L2-Ausgabe Oracle smart contract auf L1 die Statuswurzel jedes L2-Blocks. Diese Wurzeln werden optimistisch als gültig (oder abgeschlossen) akzeptiert, wenn währenddessen kein Fehlernachweis durchgeführt wird Streitzeitraum. Nur als Antragsteller gekennzeichnete Adressen können Ausgabe-Roots veröffentlichen. Die Gültigkeit von Output-Wurzeln wird dadurch angeregt, dass Antragsteller einen Einsatz hinterlegen, der gekürzt wird, wenn sie es tun hat nachweislich eine ungültige Wurzel vorgeschlagen. Transaktionen werden durch den Aufruf der Funktion initiiert initialisieren Sie Withdrawal bei einer Vorbereitstellung auf L2 und finalisieren Sie es dann auf L1 durch Aufrufen der Funktion finalizeWithdrawalTransaction auf dem zuvor erwähnten Optimism-Portal. Die dem L2-Block entsprechende Ausgabewurzel wird vom L2-Ausgabe-Oracle abgerufen. es ist überprüft, dass es abgeschlossen ist, d. h. dass die Streitfrist abgelaufen ist; Es wird überprüft, ob die Ausgabe erfolgt Root Proof entspricht dem Oracle Proof; Es wird überprüft, dass der hash der Auszahlung enthalten ist darin unter Verwendung eines Auszahlungsnachweises; dass der Rückzug noch nicht abgeschlossen ist; und dann die Der Anruf an die Zieladresse wird mit dem angegebenen Gaslimit, der angegebenen Ethermenge und den angegebenen Daten ausgeführt. 2.1.4. Cannon: das fehlersichere System Wenn ein Rollup Full Node dies durch die lokale Ausführung von Batches und hinterlegten Transaktionen erkennt Wenn der Status Layer 2 nicht mit dem Statusstamm übereinstimmt, der von einem Antragsteller in der Kette veröffentlicht wurde, kann er ausgeführt werden ein Fehlernachweis auf L1, um zu beweisen, dass das Ergebnis des Blockübergangs falsch ist. Aufgrund der Aufgrund des Overheads ist die Verarbeitung eines gesamten Rollup-Blocks auf L1 zu teuer. Die Lösung umgesetzt von Bedrock besteht darin, in der Kette nur die erste Anweisung der Meinungsverschiedenheit von Minigeth auszuführen, Kompilieren in eine MIPS-Architektur, die auf einem On-Chain-Interpreter ausgeführt und veröffentlicht wird auf L1. Minigeth ist eine vereinfachte Version von Geth 1, in der Konsens, RPC und Datenbank enthalten sind wurden entfernt. Um die erste Anweisung der Meinungsverschiedenheit zu finden, wird eine interaktive binäre Suche zwischen durchgeführt derjenige, der den Fehlernachweis initiiert hat und derjenige, der den Ausgabestamm veröffentlicht hat. Wenn der Beweis Beginnt, veröffentlichen beide Parteien die Wurzel des Speicherstatus MIPS in der Mitte der Ausführung von der Block im Challenge-Vertrag: Wenn hash übereinstimmt, bedeutet dies, dass sich beide Parteien darauf einigen Die erste Hälfte der Ausführung veröffentlicht somit die Wurzel der Hälfte der zweiten Hälfte, andernfalls die Hälfte der ersten Hälfte veröffentlicht wird und so weiter. Dadurch wird die erste Anweisung zur Meinungsverschiedenheit erreicht in einer logarithmischen Anzahl von Schritten im Vergleich zur ursprünglichen Ausführung. Wenn einer der beiden stehen bleibt Durch die Interaktion gewinnt am Ende des Streitzeitraums automatisch der andere Teilnehmer. Um die Anweisung zu verarbeiten, benötigt der Interpreter MIPS Zugriff auf seinen Speicher: da der Root vorhanden ist Sind die notwendigen Speicherzellen vorhanden, können sie durch den Nachweis ihrer Einbindung veröffentlicht werden. Zugreifen B. den Status von EVM, wird das Preimage-Orakel verwendet: Angesichts des hash eines Blocks wird es zurückgegeben 1https://geth.ethereum.org/docs

der Blockheader, aus dem man den hash des vorherigen Blocks abrufen und in den zurückkehren kann Kette, oder rufen Sie den hash des Status und der Protokolle ab, von denen man das Vorbild erhalten kann. Der oracle wird von minigeth implementiert und ersetzt die Datenbank. Es werden Anfragen an andere Knoten gestellt Holen Sie sich die Vorbilder.

Rollups otimistas

  1. Rollups otimistas A ideia de aceitar de forma otimista a saída dos blocos sem verificar sua execução é já presente no white paper Bitcoin [7], discutindo nós de luz. Esses nós seguem apenas a cadeia de cabeçalho, verificando a regra de consenso, tornando-os vulneráveis à aceitação de blocos contendo transações inválidas no caso de um ataque de 51%. Nakamoto propõe resolver isso problema usando um sistema de “alerta” para avisar os nós leves de que um bloco contém transações inválidas. Este mecanismo foi implementado pela primeira vez por Al-Bassam, Sonnino e Buterin [8] em que uma falha sistema de prova baseado em códigos de correção de erros [9] é usado. Para permitir a criação de provas de falhas, é necessário que os dados de todos os blocos, inclusive os blocos inválidos, estejam disponíveis para a rede: este é o Problema de Disponibilidade de Dados, que é resolvido usando uma análise probabilística de dados mecanismo de amostragem. O primeiro design Optimistic Rollup foi apresentado por John Adler e Mikerah Quintyne-Collins em 2019 [10], em que os blocos são publicados em outro blockchain que define seu consenso sobre o pedido. 2.1. Optimism Base rochosa Bedrock [11] é a versão mais recente de Optimism, um Smart Contract Rollup. A versão anterior, a Optimistic Virtual Machine (OVM) exigia um compilador ad hoc para compilar o Solidity em seu próprio bytecode: em contraste, Bedrock é totalmente equivalente ao EVM em que o mecanismo de execução segue a especificação do papel amarelo Ethereum [12]. 2.1.1. Depósitos Os usuários podem depositar transações por meio de um contrato no Ethereum, o Portal Optimism, chamando a função depositTransaction. Quando uma transação é executada, um O evento TransactionDeposited é emitido, e cada nó no Rollup escuta para processar depósitos. Uma transação depositada é uma transação L2 derivada de L1. Se o chamador do função é um contrato, o endereço é transformado adicionando-lhe um valor constante: isso evita ataques em que um contrato em L1 tem o mesmo endereço que um contrato em L2, mas um código diferente. A inclusão em L2 de uma transação depositada é garantida pela especificação dentro de um sequenciamento janela. As transações depositadas são um novo tipo de transação compatível com EIP-2718 [13] com prefixo 0x7E, onde os campos codificados em rlp são: • bytes32 sourceHash: hash que identifica exclusivamente a origem da transação. • endereço de: o endereço do remetente. • endereço para: o endereço do destinatário, ou o endereço zero se a transação depositada for uma criação de contrato.• uint256 mint: o valor a ser criado em L2. • valor uint256: valor a ser enviado ao destinatário. • dados de bytes: os dados de entrada. • bytes gasLimit: o limite gas da transação. O sourceHash é calculado como o keccak256 hash do bloco L1 hash e o log L1 índice, identificando exclusivamente um evento em um bloco. Como as transações depositadas são iniciadas em L1, mas executadas em L2, o sistema precisa de um mecanismo para pagar em L1 pelo gás gasto em L2. Uma solução é enviar ETH pelo Portal, mas isso implica que cada chamador (mesmo os chamadores indiretos) deve ser marcado como pagável, e isso é não é possível para muitos projetos existentes. A alternativa é queimar o gás correspondente em L1. O gás 𝑔alocado para a transação depositada é chamado de gás garantido. O preço do gás L2 em L1 não é sincronizado automaticamente, mas é estimado usando um mecanismo semelhante ao EIP-1559 [14]. A quantidade máxima de gás garantida por bloco Ethereum é de 8 milhões, com meta de 2 milhões. A quantidade 𝑐de ETH necessária para pagar o gás em L2 é 𝑐= 𝑔𝑏L2 onde 𝑏L2 é o taxa base em L2. O contrato em L1 queima uma quantidade de gás igual a 𝑐/𝑏L2. O gás gasto para ligar depositTransaction é reembolsado em L2: se este valor for maior que o gás garantido, nenhum gás é queimado. A primeira transação de um bloco rollup é uma transação depositada com atributos L1, usada para registrar em um L2 pré-implante os atributos dos blocos Ethereum. Os atributos que a pré-implantação fornece acesso são o número do bloco, o carimbo de data / hora, a taxa base, o bloco hash e a sequência número, que é o número do bloco L2 relativo ao bloco L1 associado (também chamado de época); este número é redefinido quando uma nova época começa. 2.1.2. Sequenciamento Os nós Rollup derivam a cadeia Optimism inteiramente de Ethereum. Esta cadeia é estendida cada vez que novas transações são publicadas em L1, e seus blocos são reorganizados cada vez Ethereum blocos são reorganizados. O Rollup blockchain é dividido em épocas. Para cada 𝑛 número do bloco de Ethereum, há uma época 𝑛 correspondente. Cada época contém pelo menos um bloco, e cada bloco em uma época contém uma transação depositada com atributos L1. O primeiro bloco em uma época contém todas as transações depositadas através do Portal. Layer 2 blocos também podem continha transações sequenciadas, ou seja, transações enviadas diretamente ao sequenciador. O sequenciador aceita transações de usuários e constrói blocos. Para cada bloco, ele constrói um lote a ser publicado em Ethereum. Vários lotes podem ser publicados de forma compactada, tomando o nome do canal. Um canal pode ser dividido em vários frames, caso seja muito grande para uma única transação. Um canal é definido como a compactação com ZLIB [15] de canais codificados em rlp lotes. Os campos de um lote são o número da época, a época hash, o pai hash, o carimbo de data/hora e a lista de transações. Uma janela de sequenciação, identificada por uma época, contém um número fixo 𝑤de L1 consecutivos blocos que uma etapa de derivação toma como entrada para construir um número variável de blocos L2. Para época 𝑛, a janela de sequenciamento 𝑛 inclui os blocos [𝑛, 𝑛+𝑤). Isto implica que a ordenação O número de transações e blocos L2 dentro de uma janela de sequenciamento não é corrigido até que a janela termine. Uma transação rollup é chamada de segura se o lote que a contém foi confirmado em L1. Moldurassão lidos de blocos L1 para reconstruir lotes. A implementação atual não permite a descompressão de um canal comece até que todos os quadros correspondentes tenham sido recebidos. Inválido lotes são ignorados. As transações em bloco individuais são obtidas dos lotes, que são usado pelo mecanismo de execução para aplicar transições de estado e obter o estado Rollup. 2.1.3. Retiradas Para processar saques, é implementado um sistema de mensagens L2 para L1. Ethereum precisa saber o estado do L2 para aceitar saques, e isso é feito publicando no Oracle de saída L2 smart contract em L1 a raiz de estado de cada bloco L2. Essas raízes são otimistamente aceitos como válidos (ou finalizados) se nenhuma prova de falha for realizada durante o período de disputa. Somente endereços designados como Proponentes podem publicar raízes de saída. A validade das raízes da produção é incentivada fazendo com que os proponentes depositem uma participação que será reduzida se eles forem mostrado ter proposto uma raiz inválida. As transações são iniciadas chamando a função inicieWithdrawal em uma pré-implantação em L2 e, em seguida, finalize em L1 chamando a função finalizeWithdrawalTransaction no Portal Optimism mencionado anteriormente. A raiz de saída correspondente ao bloco L2 é obtida do L2 Output Oracle; é verificou que está finalizado, ou seja, que o período de disputa já passou; verifica-se que a Saída A Prova Raiz corresponde à Prova Oracle; verifica-se que o hash do saque está incluído nele utilizando um Comprovante de Saque; que a retirada ainda não foi finalizada; e então o a chamada para o endereço de destino é executada, com o limite de gás especificado, quantidade de Ether e dados. 2.1.4. Cannon: o sistema à prova de falhas Se um Rollup Full Node, ao executar localmente lotes e transações depositadas, descobrir que o estado Layer 2 não corresponde à raiz do estado publicada na cadeia por um proponente, ele pode ser executado uma prova de falha em L1 para provar que o resultado da transição do bloco está incorreto. Por causa do sobrecarga, processar um bloco Rollup inteiro em L1 é muito caro. A solução implementada por Bedrock é executar on-chain apenas a primeira instrução de desacordo de minigeth, compilando-o em uma arquitetura MIPS que é executada em um intérprete on-chain e publicada em L1. minigeth é uma versão simplificada do geth 1 em que o consenso, RPC e banco de dados foram removidos. Para encontrar a primeira instrução de desacordo, uma busca binária interativa é conduzida entre aquele que iniciou a prova de falhas e aquele que publicou a raiz de saída. Quando a prova começa, ambas as partes publicam a raiz do estado de memória MIPS no meio da execução de o bloqueio no contrato do Desafio: se hash corresponder, significa que ambas as partes concordam com o primeira metade da execução publicando assim a raiz da metade da segunda metade, caso contrário a metade do primeiro semestre é publicado e assim por diante. Fazer isso alcança a primeira instrução de desacordo em um número logarítmico de etapas em comparação com a execução original. Se um dos dois parar interagindo, ao final do período de disputa o outro participante ganha automaticamente. Para processar a instrução, o interpretador MIPS precisa de acesso à sua memória: já que a raiz é disponíveis, as células de memória necessárias podem ser publicadas comprovando sua inclusão. Para acessar o estado do EVM, é feito uso do Preimage Oracle: dado o hash de um bloco ele retorna 1https://geth.ethereum.org/docs

o cabeçalho do bloco, a partir do qual se pode obter o hash do bloco anterior e voltar no cadeia ou obtenha o hash do estado e dos logs dos quais é possível obter a pré-imagem. O oracle é implementado pelo minigeth e substitui o banco de dados. Consultas são feitas a outros nós para obter as pré-imagens.

Gültigkeits-Rollups

  1. Gültigkeits-Rollups Das Ziel eines Validity Rollups besteht darin, die Gültigkeit des Zustandsübergangs kryptografisch nachzuweisen Angesichts der Abfolge von Transaktionen mit einem kurzen Beweis, der sublinear verglichen werden kann zum Zeitpunkt der ursprünglichen Berechnungen. Solche Zertifikate werden als Computational Integrity Proofs bezeichnet und werden praktisch mit SNARKs (Succint Non-interactive ARgument of Knowledge) umgesetzt, die Arithmetik verwenden Schaltkreise als ihr Rechenmodell. Verschiedene SNARK-Implementierungen unterscheiden sich in der Prüfzeit, Verifizierungszeit, die Notwendigkeit eines vertrauenswürdigen Aufbaus und Quantenwiderstand [16, 17]. STARKs (Skalierbar Transparentes ARgument des Wissens) [18] sind eine Art von SNARKs, für die kein vertrauenswürdiges Dokument erforderlich ist aufgebaut und sind quantenresistent, geben aber beim Nachweis und der Verifizierung etwas Effizienz ein im Vergleich zu anderen Lösungen. 3.1. StarkNet StarkNet ist ein von StarkWare entwickeltes Smart Contract Validity Rollup, das STARK verwendet Proof-System, um seinen Status auf Ethereum zu validieren. Um die Konstruktion von Gültigkeitsnachweisen zu erleichtern, a Es wird eine andere virtuelle Maschine als EVM verwendet, deren Hochsprache Cairo ist. 3.1.1. Einlagen Benutzer können Transaktionen über einen Vertrag auf Ethereum einzahlen, indem sie sendMessageToL2 aufrufen Funktion. Die Nachricht wird aufgezeichnet, indem ihr hash berechnet und ein Zähler erhöht wird. Sequenzer Warten Sie auf das LogMessageToL2-Ereignis und kodieren Sie die Informationen in einer StarkNet-Transaktion Das ruft eine Funktion eines Vertrags auf, der über den l1_handler-Dekorator verfügt. Am Ende der Ausführung, Wenn der Nachweis des Zustandsübergangs erbracht wird, wird der Verbrauch der Nachricht daran angehängt und es wird gelöscht, indem sein Zähler verringert wird. Die Einbeziehung hinterlegter Transaktionen ist in der StarkNet-Spezifikation nicht erforderlich, also ein Gas Der Markt ist erforderlich, um Sequenzern einen Anreiz zu geben, sie auf L2 zu veröffentlichen. In der aktuellen Version, weil Der Sequencer wird von StarkWare zentralisiert und verwaltet die Kosten der hinterlegten Transaktionen wird nur durch die Kosten für die Ausführung der Anzahlung bestimmt. Diese Kosten werden durch die Überweisung der ETH an bezahlt sendMessageToL2. Diese Ether bleiben auf L1 gesperrt und werden weiter an den Sequenzer übertragen L1, wenn die hinterlegte Transaktion in einen Zustandsübergang einbezogen wird. Der Betrag der gesendeten ETH, falls Die eingezahlte Transaktion ist im Preis enthalten und wird vollständig ausgegeben, unabhängig von der Menge des verbrauchten Gases auf L2. StarkNet verfügt nicht über ein System, das L1-Blockattribute automatisch verfügbar macht. Alternativ ist Fossil ein von Oiler Network 2 entwickeltes Protokoll, das bei gegebenem hash von a Block, alle Informationen, die von Ethereum durch Veröffentlichung von Vorbildern erhalten werden. 2https://www.oiler.network/3.1.2. Sequenzierung Der aktuelle Stand von StarkNet kann vollständig von Ethereum abgeleitet werden. Irgendein Zustandsunterschied zwischen Übergängen werden auf L1 als Anrufdaten veröffentlicht. Unterschiede werden für jeden Vertrag veröffentlicht und werden als uint256[] mit der folgenden Kodierung gespeichert: • Nummer des Feldes bezüglich Vertragsbereitstellungen. • Für jeden veröffentlichten Vertrag: – Die Adresse des veröffentlichten Vertrags. – Der hash des veröffentlichten Vertrags. – Die Anzahl der Argumente des Vertragskonstruktors. – Die Liste der Konstruktorargumente • Nummer des Vertrags, dessen Speicherung geändert wurde. • Für jeden Vertrag, der geändert wurde: – Die Adresse des geänderten Vertrags. – Die Anzahl der Speicheraktualisierungen. – Die Schlüssel-Wert-Paare der Speicheradressen mit den neuen Werten. Die Zustandsunterschiede werden der Reihe nach veröffentlicht, daher reicht es aus, sie nacheinander zu lesen den Staat neu aufbauen. 3.1.3. Auszahlungen Um eine Nachricht von L2 nach L1 zu senden, wird der Systemaufruf send_message_to_L1 verwendet. Die Botschaft ist auf L1 veröffentlicht, indem der Zähler hash zusammen mit dem Beweis erhöht und durch Aufrufen von abgeschlossen wird Funktion „consumeMessageFromL2“ auf dem StarkGate smart contract auf L1, die dekrementiert der Zähler. Jeder kann eine Auszahlung abschließen. 3.1.4. Gültigkeitsnachweise Die Cairo Virtual Machine [19] soll die Erstellung von STARK-Beweisen erleichtern. Die Kairo-Sprache ermöglicht die Beschreibung der Berechnung mit einer High-Level-Programmierung Sprache und nicht direkt als Schaltkreis. Dies wird durch ein System polynomialer Gleichungen erreicht 3 stellt eine einzelne Berechnung dar: den FDE-Zyklus einer von Neumann-Architektur. Die Nummer Die Anzahl der Einschränkungen ist somit fest und unabhängig von der Art der Berechnung, sodass nur eine zulässig ist Prüfprogramm für jedes Programm, dessen Berechnung bewiesen werden muss. StarkNet fasst mehrere Transaktionen mithilfe eines gemeinsamen Prüfers zu einem einzigen STARK-Beweis zusammen mit dem Namen SHARP. Die Nachweise werden an smart contract am Ethereum gesendet, der ihre Gültigkeit überprüft und aktualisiert die Merkle-Wurzel, die dem neuen Status entspricht. Die sublinearen Kosten für die Überprüfung von a Durch den Gültigkeitsnachweis können die Kosten über mehrere Transaktionen amortisiert werden. 3Algebraische Zwischendarstellung (AIR) genannt

Rollups de validade

  1. Rollups de validade O objetivo de um Validity Rollup é provar criptograficamente a validade da transição de estado dada a sequência de transações com uma prova curta que pode ser verificada sub-linearmente comparada ao tempo dos cálculos originais. Esses tipos de certificados são chamados de provas de integridade computacional e são praticamente implementados com SNARKs (Succint Non-interactive ARgument of Knowledge), que utilizam aritmética circuitos como seu modelo computacional. Diferentes implementações do SNARK diferem no tempo de prova, tempo de verificação, a necessidade de uma configuração confiável e resistência quântica [16, 17]. STARKs (escalável ARgumento Transparente de Conhecimento) [18] são um tipo de SNARKs que não requer um confiável configurados e são resistentes a quantum, ao mesmo tempo que abrem mão de alguma eficiência na prova e verificação em comparação com outras soluções. 3.1. StarkNet StarkNet é um Smart Contract Validity Rollup desenvolvido pela StarkWare que usa o STARK sistema de prova para validar seu estado para Ethereum. Para facilitar a construção de provas de validade, um É utilizada uma máquina virtual diferente da EVM, cuja linguagem de alto nível é Cairo. 3.1.1. Depósitos Os usuários podem depositar transações por meio de um contrato em Ethereum chamando sendMessageToL2 função. A mensagem é registrada calculando seu hash e aumentando um contador. Sequenciadores ouça o evento LogMessageToL2 e codifique as informações em uma transação StarkNet que chama uma função de um contrato que possui o decorador l1_handler. No final da execução, quando a prova de transição de estado é produzida, o consumo da mensagem é anexado a ela e é excluído diminuindo seu contador. A inclusão de transações depositadas não é exigida pela especificação StarkNet, portanto, um gás mercado é necessário para incentivar os sequenciadores a publicá-los em L2. Na versão atual, porque o Sequenciador é centralizado e gerenciado pela StarkWare, o custo das transações depositadas é determinado apenas pelo custo de execução do depósito. Este custo é pago enviando ETH para enviarMessageToL2. Esses Éteres permanecem bloqueados em L1 e são transferidos para o Sequenciador em L1, quando a transação depositada está incluída em uma transição de estado. A quantidade de ETH enviada, se a transação depositada está incluída, é totalmente gasta, independentemente da quantidade de gás consumida em L2. StarkNet não possui um sistema que disponibilize atributos do bloco L1 automaticamente. Alternativamente, Fossil é um protocolo desenvolvido pela Oiler Network 2 que permite, dado um hash de um bloco, qualquer informação a ser obtida de Ethereum através da publicação de pré-imagens. 2https://www.oiler.network/3.1.2. Sequenciamento O estado atual de StarkNet pode ser derivado inteiramente de Ethereum. Qualquer diferença de estado entre transições é publicado em L1 como calldata. As diferenças são publicadas para cada contrato e são salvos como uint256[] com a seguinte codificação: • Número de campos relativos a implantações contratuais. • Para cada contrato publicado: – O endereço do contrato publicado. – O hash do contrato publicado. – O número de argumentos do construtor do contrato. – A lista de argumentos do construtor • Número de contrato cuja armazenagem foi modificada. • Para cada contrato que foi modificado: – O endereço do contrato modificado. – O número de atualizações de armazenamento. – Os pares de valores-chave dos endereços de armazenamento com os novos valores. As diferenças de estado são publicadas em ordem, portanto é suficiente lê-las sequencialmente para reconstruir o estado. 3.1.3. Retiradas Para enviar uma mensagem de L2 para L1, é usado o syscall send_message_to_L1. A mensagem é publicado em L1 aumentando seu contador hash junto com a prova e finalizado chamando o função consomeMessageFromL2 no StarkGate smart contract em L1, que diminui o contador. Qualquer pessoa pode finalizar qualquer saque. 3.1.4. Provas de validade A Máquina Virtual Cairo [19] foi projetada para facilitar a construção de provas STARK. A linguagem Cairo permite que o cálculo seja descrito com uma programação de alto nível linguagem, e não diretamente como um circuito. Isso é conseguido por um sistema de equações polinomiais 3 representando um único cálculo: o ciclo FDE de uma arquitetura von Neumann. O número de restrições é, portanto, fixo e independente do tipo de computação, permitindo apenas um Programa verificador para cada programa cujo cálculo precisa ser provado. StarkNet agrega múltiplas transações em uma única prova STARK usando um provador compartilhado chamado SHARP. As provas são enviadas para smart contract em Ethereum, que verifica sua validade e atualiza a raiz Merkle correspondente ao novo estado. O custo sublinear de verificar um a prova de validade permite que seu custo seja amortizado em múltiplas transações. 3chamada Representação Algébrica Intermediária (AIR)

Vergleich

  1. Vergleich 4.1. Auszahlungszeit Der wichtigste Aspekt, der optimistische Rollups von Validity Rollups unterscheidet, ist der Zeit, die zwischen der Initialisierung einer Auszahlung und ihrem Abschluss vergeht. In beiden Fällen Auszahlungen werden auf L2 initialisiert und auf L1 abgeschlossen. Am StarkNet ist die Finalisierung möglich als Sobald der Gültigkeitsnachweis der neuen Statuswurzel am Ethereum akzeptiert wird: Theoretisch ist dies der Fall Es ist möglich, nach der Initialisierung Geld im ersten Block von L1 abzuheben. In der Praxis ist die Die Häufigkeit des Sendens von Gültigkeitsnachweisen auf Ethereum ist ein Kompromiss zwischen der Blockgeschwindigkeit Finalisierung und Proof-Aggregation. Derzeit stellt StarkNet Gültigkeitsnachweise zur Überprüfung bereit alle 10 Stunden 4, soll aber mit zunehmender Transaktionsaktivität verringert werden. Auf Optimism Bedrock ist es möglich, eine Auszahlung erst am Ende des Streits abzuschließen Zeitraum (derzeit 7 Tage), nach dem ein Root automatisch als gültig gilt. Die Länge von Dieser Zeitraum wird hauptsächlich dadurch bestimmt, dass Fehlernachweise bis zum Ethereum zensiert werden können sein Ende. Die Erfolgswahrscheinlichkeit dieser Art von Angriff nimmt mit zunehmender Zeit exponentiell ab: E[subtrahierter Wert] = 𝑉𝑝𝑛 Dabei ist 𝑛 die Anzahl der Blöcke in einem Intervall und 𝑉 der Betrag, der abgezogen werden kann durch Veröffentlichung einer ungültigen Wurzel, und 𝑝ist die Wahrscheinlichkeit, eine Zensur erfolgreich durchzuführen Angriff in einem einzigen Block. Angenommen, diese Wahrscheinlichkeit beträgt 99 %, sodass der Wert im Rollup gesperrt ist eine Million Ether beträgt und dass die Blöcke in einem Intervall 1800 sind (6 Stunden Blöcke mit einer 12 Sekundenintervall): Der erwartete Wert liegt bei etwa 0,01391 Ether. Das System wird durch gesichert Bitten Sie die Antragsteller, eine viel größere Menge Ether als den erwarteten Wert einzusetzen. Winzer et al. zeigte, wie man einen Zensurangriff mit einem einfachen smart contract durchführt Dadurch wird sichergestellt, dass sich bestimmte Speicherbereiche im Status [20] nicht ändern. Den Angriff modellieren Als Markov-Spiel zeigt der Artikel, dass Zensur die vorherrschende Strategie für ein Rationales ist Blockproduzenten, wenn sie mehr Entschädigung erhalten, als die Transaktion, die sich ändert, einschließen die Erinnerung. Der oben besprochene 𝑝Wert kann als Prozentsatz der rationalen Blockade angesehen werden Produzenten im Netzwerk, wobei „rational“ mögliche Strafen nicht berücksichtigt Externalitäten, wie z. B. weniger Vertrauen in blockchain, das seinen Kryptowährungswert verringert. Der folgende Code stellt einen smart contract dar, der für einen Zensurangriff verwendet werden kann auf Grundgestein. Der Angriff nutzt die Anreize der Blockproduzenten aus, indem er ihnen Bestechungsgelder anbietet um die Transaktionen zu zensieren, die bestimmte Teile des Staates verändern würden. Der Hauptvertrag Mit der Funktion ClaimBribe können Blockproduzenten Bestechungsgelder einfordern, wenn sie erfolgreich zensieren die Zieltransaktion, indem überprüft wird, ob der ungültige Ausgabestamm nicht berührt wird. Funktion ClaimBribe(Bytes Speicher StorageProof) external { require(!claimed[block.number], „Bestechung bereits eingefordert“); OutputProposal-Speicherstrom = storageOracle.getStorage(L2_ORACLE, block.number, SLOT, storageProof); require(invalidOutputRoot == current.outputRoot, "Angriff fehlgeschlagen"); beansprucht[block.nummer] = true; (bool sent, ) = block.coinbase.call{value: bribeAmount}(""); 4https://etherscan.io/address/0xc662c410c0ecf747543f5ba90660f6abebd9c8c4require(sent, „Ether konnte nicht gesendet werden“); } Listing 1: Beispiel eines Vertrags, der einen Anreiz für einen Zensurangriff auf Bedrock bietet. Bei der Länge der Streitfrist ist auch die Tatsache zu berücksichtigen, dass der Beweis des Verschuldens vorliegt ein interaktiver Beweis und daher muss den Teilnehmern genügend Zeit zur Interaktion zur Verfügung gestellt werden und dass jede Interaktion zensiert werden könnte. Wenn der letzte Zug zu einem Zeitpunkt sehr nahe am erfolgt Am Ende des Streitzeitraums sind die Zensurkosten deutlich geringer. Obwohl Zensur das ist Bei einer dominanten Strategie ist die Erfolgswahrscheinlichkeit geringer, da zensierende Knoten anfällig dafür sind Denial-of-Service-Angriffe: Ein Angreifer kann sehr komplexe Transaktionen generieren, die mit dem enden Die Veröffentlichung eines Fehlernachweises ist kostenfrei, da keine Gebühren anfallen. Im Extremfall ermöglicht eine lange Streitdauer eine Abstimmung im Erfolgsfall Zensurangriff, um einen Fork zu organisieren und die angreifenden Blockproduzenten auszuschließen. Ein anderer Ein möglicher Angriff besteht darin, mehr staatliche Stammvorschläge zu veröffentlichen, als die Streitparteien überprüfen können. was durch eine Frequenzbegrenzung vermieden werden kann. 4.1.1. Schnelle optimistische Abhebungen Da die Gültigkeit eines Optimistic Rollups jederzeit von jedem Full Node überprüft werden kann, a vertrauenswürdig oracle kann verwendet werden, um auf L1 zu erfahren, ob die Auszahlung sicher abgeschlossen werden kann. Dies Der Mechanismus wurde zuerst vom Hersteller [21] vorgeschlagen: Ein oracle überprüft die Auszahlung und veröffentlicht die Ergebnis auf L1, auf dem dem Benutzer automatisch ein verzinsliches Darlehen zugewiesen wird nach Ablauf von 7 Tagen geschlossen, d. h. wenn die Auszahlung tatsächlich abgeschlossen werden kann. Diese Lösung führt eine Vertrauensannahme ein, die im Fall von Maker jedoch durch den Operator oracle minimiert wird wird von derselben Organisation verwaltet, die das Risiko durch die Bereitstellung des Darlehens übernimmt. 4.2. Transaktionskosten Die Kosten von L2-Transaktionen werden hauptsächlich durch die Interaktion mit L1 bestimmt. In beiden Lösungen Der Rechenaufwand für Transaktionen ist sehr gering, da sie vollständig außerhalb der Kette ausgeführt werden. Optimism veröffentlicht L2-Transaktionsanrufdaten als Anrufdaten und führt selten (oder nie) einen Fehler aus Beweise, daher sind Anrufdaten die teuerste Ressource. Am 12. Januar 2022 ein Bedrock-Netzwerk wurde im Goerli-Testnetz von Ethereum gestartet. Es kann eine Gaskompressionsrate berechnet werden indem die in einem bestimmten Zeitraum auf Bedrock verbrauchte Gasmenge verfolgt und mit der Menge verglichen wird Menge an Gas, die für L1 für die entsprechenden Blöcke ausgegeben wird. Mit dieser Methode wird eine Gaskompression durchgeführt Es wurde eine Rate von ∼20 : 1 gefunden, diese Zahl kann jedoch je nach tatsächlicher Aktivität im Mainnet abweichen. StarkNet veröffentlicht am Ethereum jede Änderung im L2-Status als Aufrufdaten, daher erfolgt die Speicherung die teuerste Ressource. Da das Netzwerk EVM nicht verwendet, betragen die Transaktionskosten Die Komprimierung kann nicht trivial abgeschätzt werden. Durch die Übernahme der Ausführungskosten und der Anrufdaten vernachlässigbar sein, ist es möglich, das Komprimierungsverhältnis von Speicherschreibvorgängen im Vergleich zu zu berechnen L1. Es wird davon ausgegangen, dass kein Vertrag bereitgestellt wird und 10 Zellen, auf die zuvor nicht auf StarkNet zugegriffen wurde, vorhanden sind modifiziert, wird eine Komprimierungsrate der Speicherschreibkosten von ∼24:1 gefunden. Wenn eine Zelle überschrieben wird 𝑛Zeiten zwischen Datenveröffentlichungen betragen die Kosten für jeden Schreibvorgang 1/𝑛im Vergleich zu den Kosten eines einzelnen Schreibvorgangs, da nur der letzte veröffentlicht wird. Die Kosten können dadurch weiter minimiert werdenKomprimierung häufig verwendeter Werte. Die Kosten für die Überprüfung des Gültigkeitsnachweises werden aufgeteilt die Transaktionen, auf die es sich bezieht: zum Beispiel enthält StarkNet Block 4779 200 Transaktionen und seine Der Gültigkeitsnachweis verbraucht 267830 Gaseinheiten oder 1339,15 Gas pro Transaktion. 4.2.1. Anrufdaten optimieren: Cache-Vertrag Nachfolgend wird ein smart contract vorgestellt, der einen Adresscache für häufig verwendete Adressen implementiert Adressen unter Ausnutzung der Tatsache, dass Speicherung und Ausführung wesentlich kostengünstiger sind Ressourcen, zusammen mit einem Friends-Vertrag, der ihre Verwendung belegt. Letzterer behält den Überblick „Freunde“ einer Adresse, die durch Aufruf der Funktion addFriend registriert werden können. Wenn eine Adresse bereits mindestens einmal verwendet wurde, kann es durch den Aufruf von addFriendWithCache hinzugefügt werden Funktion: Die Cache-Indizes sind 4-Byte-Ganzzahlen, während die Adressen durch 20 Bytes dargestellt werden. es gibt also eine 5:1-Ersparnis beim Funktionsargument. Die gleiche Logik kann für andere Daten verwendet werden Typen wie Ganzzahlen oder allgemeiner Bytes. Vertrag AddressCache { Mapping(address => uint32) public address2key; Adresse[] öffentlicher Schlüssel2Adresse; Funktion CacheWrite(Adresse _Adresse) interne Rückgabe (uint32) { require(key2address.length < type(uint32).max, "AddressCache: Cache ist voll"); require(address2key[_address] == 0, "AddressCache: Adresse bereits zwischengespeichert"); // Schlüssel müssen bei 1 beginnen, da 0 „nicht gefunden“ bedeutet uint32 key = uint32(key2address.length + 1); address2key[_address] = Schlüssel; key2address.push(_address); Eingabetaste; } Funktion „cacheRead(uint32 _key)“ öffentliche Ansicht gibt (Adresse) { zurück require(_key <= key2address.length && _key > 0, "AddressCache: Schlüssel nicht gefunden"); return key2address[_key - 1]; } } Listing 2: Adress-Cache-Vertrag. Vertrag Freunde ist AddressCache { Mapping(Adresse => Adresse[]) öffentliche Freunde; Funktion addFriend(address _friend) public { friends[msg.sender].push(_friend); CacheWrite(_friend); } function addFriendWithCache(uint32 _friendKey) public { friends[msg.sender].push(cacheRead(_friendKey)); } Funktion getFriends() öffentliche Ansicht gibt (Adresse[] Speicher) { return friends[msg.sender];} } Listing 3: Beispiel für einen Vertrag, der den Adress-Cache erbt. Der Vertrag unterstützt im Cache etwa 4 Milliarden (232) Adressen, und das Hinzufügen eines Bytes ergibt etwa 1 Billion (240). 4.2.2. Speicher optimieren: Filter von Bloom Auf StarkNet gibt es mehrere Techniken zur Minimierung der Speichernutzung. Wenn es nicht nötig ist Um die Verfügbarkeit der Originaldaten zu gewährleisten, reicht es aus, deren hash: this in der Kette zu speichern ist der Mechanismus zum Speichern von Daten für einen ERC-721 (NFT) [22], d. h. eine IPFS-Verbindung, die das auflöst hash der Daten, sofern verfügbar. Bei mehrfach gespeicherten Daten besteht die Möglichkeit, eine Nachschlagefunktion zu nutzen Tabelle ähnlich dem für Optimism eingeführten Caching-System, bei dem alle Werte gespeichert werden müssen mindestens einmal. Bei einigen Anwendungen kann das Speichern aller Werte durch die Verwendung eines Bloom-Filters vermieden werden [23, 24, 25], d. h. eine probabilistische Datenstruktur, die es einem ermöglicht, mit Sicherheit zu wissen, ob Ein Element gehört nicht zu einer Menge, lässt aber eine kleine, aber nicht vernachlässigbare Wahrscheinlichkeit zu, dass es falsch ist Positives. Ein Bloom-Filter wird als Array von 𝑚Bits bei Null initialisiert. Um ein Element hinzuzufügen, funktioniert 𝑘hash mit einer gleichmäßigen Zufallsverteilung werden verwendet, die jeweils einem Bit des festgelegten Arrays zugeordnet sind zu 1. Um zu überprüfen, ob ein Element zur Menge gehört, führen wir die Funktionen 𝑘hash aus und überprüfen dass die 𝑘bits auf 1 gesetzt sind. In einem einfachen Bloom-Filter gibt es keine Möglichkeit zu unterscheiden, ob ein Das Element gehört tatsächlich zur Menge oder ist falsch positiv, eine Wahrscheinlichkeit, die mit der Zahl wächst der Einträge steigt. Nach dem Einfügen von 𝑛Elementen: P[falsch positiv] = (︃ 1 − [︂ 1 −1 𝑚 ]︂𝑘𝑛)︃𝑘 ≈ (︁ 1 −𝑒−𝑘𝑛/𝑚)︁𝑘 unter der Annahme, dass die Wahrscheinlichkeit jedes Bitsatzes unabhängig ist. Wenn 𝑛Elemente (beliebiger Größe!) sind Es wird erwartet, dass enthalten ist, und die Wahrscheinlichkeit eines tolerierten falschen Positivs beträgt 𝑝, die Größe des Arrays kann berechnet werden als: 𝑚= −𝑛ln 𝑝 (ln 2)2 Während die optimale Anzahl von hash-Funktionen ist: 𝑘= 𝑚 𝑛ln 2 Wenn wir davon ausgehen, dass 1000 Elemente mit einer Toleranz von 1 % eingefügt werden, beträgt die Größe des Arrays 9585 Bit mit 𝑘= 6, während es bei einer Toleranz von 0,1 % mit 𝑘= 9 zu 14377 Bits wird. Wenn eine Million Elemente erwartet werden, dass eingefügt wird, beträgt die Größe des Arrays etwa 1170 kB für 1 % und 1775 kB für 0,1 %, mit den gleichen Werten von 𝑘, da es nur von 𝑝[26] abhängt. In einem Spiel, in dem Spieler keinem Gegner zugewiesen werden dürfen, den sie bereits herausgefordert haben, Anstatt die Liste der früheren Gegner für jeden Spieler im Speicher zu speichern, kann man einen Bloom verwenden Filter. Das Risiko, einige Spieler nicht herauszufordern, ist oft akzeptabel und der Filter kann zurückgesetzt werden periodisch.4.3. Ethereum Kompatibilität Der Hauptvorteil der Kompatibilität mit EVM und Ethereum ist die Wiederverwendung aller verfügbaren Werkzeuge. Ethereum smart contracts können ohne jegliche Änderung auf Optimism veröffentlicht werden neue Prüfungen. Wallets bleiben kompatibel, Entwicklungs- und statische Analysetools, allgemeine Analyse Tools, Indizierungstools und oracles. Ethereum und Solidity haben eine lange, gut erforschte Geschichte Schwachstellen wie Wiedereintrittsangriffe, Über- und Unterläufe, schnelle Kredite und oracle Manipulationen. Aus diesem Grund konnte Optimism in kurzer Zeit einen großen Wert erzielen Zeit. Die Entscheidung für die Einführung einer anderen virtuellen Maschine bedeutet, dass ein gesamtes Ökosystem neu aufgebaut werden muss. mit dem Vorteil einer größeren Umsetzungsfreiheit. StarkNet implementiert das Konto nativ Abstraktion, ein Mechanismus, bei dem jedes Konto ein smart contract ist, das implementiert werden kann beliebige Logik, solange sie einer Schnittstelle entspricht (daher der Begriff Abstraktion): Dies ermöglicht die Verwendung verschiedener digitaler Signaturschemata, die Möglichkeit, den privaten Schlüssel mithilfe des zu ändern dieselbe Adresse oder verwenden Sie ein Multisig. Die Ethereum-Community hat die Einführung vorgeschlagen Mechanismus mit EIP-2938 im Jahr 2020, aber der Vorschlag ist seit mehr als einem Jahr veraltet Andere Updates haben höhere Priorität erhalten [27]. Ein weiterer wichtiger Vorteil der Kompatibilität ist die Wiederverwendung vorhandener Clients: Optimism verwendet eine Version von Geth für seinen eigenen Knoten mit nur ∼800 Zeilen Unterschied, was bisher der Fall war entwickelt, getestet und gewartet seit 2014. Ein robuster Client ist ausschlaggebend was im Netzwerk als gültig akzeptiert wird oder nicht. Ein Fehler in der Implementierung des Fehlernachweises Das System könnte dazu führen, dass ein falscher Beweis als richtig oder ein korrekter Beweis als ungültig akzeptiert wird Der Block wird als falsch akzeptiert und gefährdet das System. Die Wahrscheinlichkeit dieser Art von Der Angriff kann mit einer größeren Client-Vielfalt eingeschränkt werden: Optimism kann zusätzlich zu geth wiederverwendet werden andere Ethereum-Clients wurden bereits gepflegt, und die Entwicklung eines weiteren Erigon-basierten Clients ist im Gange bereits im Gange. Im Jahr 2016 wurde ein Problem in der Speicherverwaltung von Geth ausgenutzt DoS-Angriff und die erste Verteidigungslinie bestand darin, die Verwendung von Parity zu empfehlen, die zweithäufigste verwendeter Client zu der Zeit 5. StarkNet steht vor dem gleichen Problem mit Gültigkeitsnachweisen, aber die Clients müssen von Grund auf neu geschrieben werden und das Beweissystem ist viel komplexer und folglich Es ist auch viel komplexer, die Korrektheit sicherzustellen.

Comparação

  1. Comparação 4.1. Tempo de retirada O aspecto mais importante que distingue os Rollups Otimistas dos Rollups de Validade é o tempo que decorre entre a inicialização de um levantamento e a sua finalização. Em ambos os casos, as retiradas são inicializadas em L2 e finalizadas em L1. Em StarkNet, a finalização é possível como assim que a prova de validade da nova raiz de estado for aceita em Ethereum: teoricamente, é possível retirar fundos no primeiro bloco de L1 após a inicialização. Na prática, o frequência de envio de provas de validade em Ethereum é uma compensação entre a velocidade do bloco finalização e agregação de provas. Atualmente StarkNet fornece provas de validade para verificação a cada 10 horas 4, mas pretende-se que diminua à medida que a atividade de transação aumenta. Em Optimism Bedrock é possível finalizar um saque somente no final da disputa período (atualmente 7 dias), após o qual uma raiz é automaticamente considerada válida. O comprimento de este período é determinado principalmente pelo fato de que as provas de falha podem ser censuradas em Ethereum até seu fim. A probabilidade de sucesso deste tipo de ataque diminui exponencialmente à medida que o tempo aumenta: E[valor subtraído] = 𝑉𝑝𝑛 onde 𝑛 é o número de blocos em um intervalo, 𝑉 é a quantidade de fundos que pode ser subtraída publicando uma raiz inválida, e 𝑝é a probabilidade de realizar uma censura com sucesso ataque em um único bloco. Suponha que esta probabilidade seja de 99%, que o valor bloqueado no Rollup é um milhão de Ether, e que os blocos em um intervalo são 1800 (6 horas de blocos com 12 intervalo de segundos): o valor esperado é cerca de 0,01391 Ether. O sistema é tornado seguro por pedindo aos proponentes que apostem uma quantidade muito maior de Ether do que o valor esperado. Winzer et al. mostrou como realizar um ataque de censura usando um simples smart contract isso garante que certas áreas da memória no estado não mudem [20]. Modelando o ataque como um jogo de Markov, o artigo mostra que a censura é a estratégia dominante para uma bloquear o produtor se receberem mais compensação do que incluindo a transação que muda a memória. O valor de 𝑝 discutido acima pode ser visto como a percentagem do bloco racional produtores da rede, onde “racional” não leva em conta possivelmente penalizar externalidades, como menos confiança no blockchain que diminui seu valor de criptomoeda. O código a seguir apresenta um smart contract que pode ser usado para realizar um ataque de censura em Bedrock. O ataque explora os incentivos dos produtores de blocos, oferecendo-lhes suborno censurar as transações que modificariam partes específicas do estado. O principal do contrato função, ClaimBribe, permite que os produtores de blocos reivindiquem o suborno se conseguirem censurar a transação alvo, verificando se a raiz de saída inválida não foi tocada. função reivindicaçãoSuborno(bytes memória storageProof) externo { require(!claimed[block.number], "suborno já reivindicado"); Memória OutputProposal atual = storageOracle.getStorage(L2_ORACLE, block.number, SLOT, prova de armazenamento); require(invalidOutputRoot == current.outputRoot, "ataque falhou"); reivindicado[bloco.número] = verdadeiro; (bool enviado,) = block.coinbase.call{valor: bribeAmount}(""); 4https://etherscan.io/address/0xc662c410c0ecf747543f5ba90660f6abebd9c8c4require(enviado, "falha ao enviar ether"); } Listagem 1: Exemplo de contrato que incentiva um ataque de censura a Bedrock. A duração do período de litígio também deve ter em conta o facto de a prova da culpa ser uma prova interativa e, portanto, deve ser fornecido tempo suficiente para os participantes interagirem e que qualquer interação poderia ser censurada. Se o último movimento ocorrer num momento muito próximo do final do período de disputa, o custo da censura é significativamente menor. Embora a censura seja o estratégia dominante, a probabilidade de sucesso é menor porque os nós de censura são vulneráveis a Ataques de negação de serviço: um invasor pode gerar transações muito complexas que terminam com o publicação de uma prova de culpa sem nenhum custo, uma vez que nenhuma taxa seria paga. Em casos extremos, um longo período de litígio permite a coordenação no caso de uma decisão bem-sucedida. ataque de censura para organizar um fork e excluir os produtores de blocos atacantes. Outro possível ataque consiste em publicar mais propostas de raiz estatal do que os disputantes podem verificar, que pode ser evitado usando um limite de frequência. 4.1.1. Retiradas rápidas e otimistas Como a validade de um Optimistic Rollup pode ser verificada a qualquer momento por qualquer Full Node, um confiável oracle pode ser usado para saber em L1 se a retirada pode ser finalizada com segurança. Isto mecanismo foi proposto pela primeira vez pelo Maker [21]: um oracle verifica a retirada, publica o resultado em L1 em que um empréstimo remunerado é atribuído ao usuário, que é automaticamente fechado ao final de 7 dias, ou seja, quando o saque pode realmente ser finalizado. Esta solução introduz uma suposição de confiança, mas no caso do Maker ela é minimizada, pois o operador oracle é gerido pela mesma organização que assume o risco ao conceder o empréstimo. 4.2. Custos de transação O custo das transações L2 é determinado principalmente pela interação com a L1. Em ambas as soluções o custo computacional das transações é muito barato, pois é executado inteiramente fora da cadeia. Optimism publica calldata de transações L2 como calldata e raramente (ou nunca) executa falha provas, portanto calldata é o recurso mais caro. Em 12 de janeiro de 2022, uma rede Bedrock foi lançado na testnet Goerli de Ethereum. Uma taxa de compressão de gás pode ser calculada rastreando a quantidade de gás usada em Bedrock em um determinado período e comparando-a com o quantidade de gás gasta em L1 para os blocos correspondentes. Usando este método, uma compressão de gás taxa de ∼20: 1 é encontrada, mas este número pode diferir com a atividade real na rede principal. StarkNet publica em Ethereum todas as alterações no estado L2 como dados de chamada, portanto, o armazenamento é o recurso mais caro. Como a rede não utiliza EVM, o custo da transação a compressão não pode ser estimada trivialmente. Ao assumir o custo de execução e calldata para ser insignificante, é possível calcular a taxa de compactação de gravações de armazenamento em comparação com L1. Supondo que nenhum contrato seja implantado e 10 células não acessadas anteriormente em StarkNet sejam modificado, uma taxa de compactação de custo de gravação de armazenamento de ∼24: 1 é encontrada. Se uma célula for sobrescrita 𝑛vezes entre publicações de dados, o custo de cada gravação será 1/𝑛comparado ao custo de uma única escrita, já que apenas a última é publicada. O custo pode ser ainda mais minimizado porcompactando valores usados ​​com frequência. O custo da verificação da prova de validade é dividido entre as transações às quais se refere: por exemplo, o bloco StarkNet 4779 contém 200 transações e seu o comprovante de validade consome 267.830 unidades de gás, ou 1.339,15 gás para cada transação. 4.2.1. Otimizando calldata: contrato de cache Apresentado abaixo está um smart contract que implementa um cache de endereço para uso frequente endereços aproveitando o fato de que o armazenamento e a execução são muito mais baratos recursos, juntamente com um contrato de Amigos que demonstra seu uso. Este último acompanha o “amigos” de um endereço que pode ser registrado chamando a função addFriend. Se um endereço já foi usado pelo menos uma vez, ele pode ser adicionado chamando addFriendWithCache função: os índices de cache são inteiros de 4 bytes enquanto os endereços são representados por 20 bytes, portanto, há uma economia de 5:1 no argumento da função. A mesma lógica pode ser usada para outros dados tipos como inteiros ou, mais geralmente, bytes. contrato AddressCache { mapeamento (endereço => uint32) public address2key; endereço[] endereço-chave2 público; função cacheWrite(address _address) retornos internos (uint32) { require(key2address.length <type(uint32).max, "AddressCache: cache está cheio"); require(address2key[_address] == 0, "AddressCache: endereço já armazenado em cache"); // as chaves devem começar em 1 porque 0 significa "não encontrado" chave uint32 = uint32(key2address.length + 1); endereço2key[_endereço] = chave; key2address.push(_address); chave de retorno; } função cacheRead (uint32 _key) visualização pública retorna (endereço) { require(_key <= key2address.length && _key > 0, "AddressCache: chave não encontrada"); retornar key2address[_key - 1]; } } Listagem 2: Contrato de cache de endereço. contrato Amigos é AddressCache { mapeamento(endereço => endereço[]) amigos públicos; function addAmigo(endereço_amigo) public { amigos[msg.remetente].push(_amigo); cacheWrite(_amigo); } função addFriendWithCache(uint32 _friendKey) public { amigos[msg.sender].push(cacheRead(_friendKey)); } função getFriends() visualização pública retorna (endereço[] memória) { retornar amigos[msg.sender];} } Listagem 3: Exemplo de contrato que herda o cache de endereços. O contrato suporta em cache cerca de 4 bilhões (232) endereços, e adicionar um byte dá cerca de 1 trilhão (240). 4.2.2. Otimizando o armazenamento: filtros Bloom Em StarkNet existem diversas técnicas para minimizar o uso de armazenamento. Se não for necessário garantir a disponibilidade dos dados originais, então é suficiente salvar on-chain seu hash: este é o mecanismo usado para salvar dados para um ERC-721 (NFT) [22], ou seja, um link IPFS que resolve o hash dos dados, se disponíveis. Para dados armazenados diversas vezes, é possível usar uma pesquisa tabela semelhante ao sistema de cache introduzido para Optimism, exigindo que todos os valores sejam salvos em pelo menos uma vez. Para algumas aplicações, salvar todos os valores pode ser evitado usando um filtro Bloom [23, 24, 25], ou seja, uma estrutura de dados probabilística que permite saber com certeza se um elemento não pertence a um conjunto, mas admite uma probabilidade pequena, mas não desprezível, de falso positivos. Um filtro Bloom é inicializado como uma matriz de 𝑚bits em zero. Para adicionar um elemento, 𝑘hash funções com uma distribuição aleatória uniforme são usados, cada um mapeando para um bit da matriz que está definida para 1. Para verificar se um elemento pertence ao conjunto, executamos as funções 𝑘hash e verificamos que os 𝑘bits estão definidos como 1. Num filtro de Bloom simples, não há como distinguir se um elemento realmente pertence ao conjunto ou é um falso positivo, uma probabilidade que aumenta à medida que o número de entradas aumenta. Depois de inserir 𝑛elementos: P[falso positivo] = (︃ 1 - [︂ 1 −1 𝑚 ]︂𝑘𝑛)︃𝑘 ≈ (︁ 1 −𝑒−𝑘𝑛/𝑚)︁𝑘 assumindo a independência da probabilidade de cada conjunto de bits. Se 𝑛elementos (de tamanho arbitrário!) são espera-se que seja incluído e a probabilidade de um falso positivo tolerado é 𝑝, o tamanho da matriz pode ser calculado como: 𝑚= −𝑛ln 𝑝 (Em 2)2 Embora o número ideal de funções hash seja: 𝑘= 𝑚 𝑛ln 2 Se assumirmos a inserção de 1.000 elementos com tolerância de 1%, o tamanho do array será de 9.585 bits com 𝑘= 6, enquanto para uma tolerância de 0,1% torna-se 14377 bits com 𝑘= 9. Se um milhão de elementos espera-se que sejam inseridos, o tamanho da matriz torna-se cerca de 1170 kB para 1% e 1775 kB para 0,1%, com os mesmos valores de 𝑘, pois depende apenas de 𝑝[26]. Num jogo em que os jogadores não devem ser atribuídos a um adversário que já tenham desafiado, em vez de salvar no armazenamento para cada jogador a lista de oponentes anteriores, pode-se usar um Bloom filtro. O risco de não desafiar alguns jogadores é muitas vezes aceitável, e o filtro pode ser reiniciado periodicamente.4.3. Ethereum compatibilidade A principal vantagem de ser compatível com EVM e Ethereum é o reaproveitamento de todos os disponíveis ferramentas. Ethereum smart contracts podem ser publicados em Optimism sem qualquer modificação nem novas auditorias. As carteiras permanecem compatíveis, ferramentas de desenvolvimento e análise estática, análise geral ferramentas, ferramentas de indexação e oracles. Ethereum e Solidity têm uma longa história de estudos bem estudados vulnerabilidades, como ataques de reentrada, overflows e underflows, empréstimos instantâneos e oracle manipulações. Por causa disso, Optimism foi capaz de capturar uma grande quantidade de valor em um curto espaço de tempo tempo. Optar por adotar uma máquina virtual diferente implica reconstruir todo um ecossistema, com a vantagem de uma maior liberdade de implementação. StarkNet implementa conta nativamente abstração, que é um mecanismo pelo qual cada conta é um smart contract que pode implementar lógica arbitrária, desde que esteja em conformidade com uma interface (daí o termo abstração): isso permite o uso de diferentes esquemas de assinatura digital, a capacidade de alterar a chave privada usando o mesmo endereço ou use um multisig. A comunidade Ethereum propôs a introdução deste mecanismo com EIP-2938 em 2020, mas a proposta permaneceu obsoleta por mais de um ano como outras atualizações receberam mais prioridade [27]. Outro benefício importante obtido com a compatibilidade é a reutilização de clientes existentes: Optimism usa uma versão de geth para seu próprio nó com apenas 800 linhas de diferença, que foi desenvolvido, testado e mantido desde 2014. Ter um cliente robusto é crucial, pois define o que é aceito como válido ou não na rede. Um bug na implementação da prova de falhas sistema pode fazer com que uma prova incorreta seja aceita como correta ou uma prova correta para uma prova inválida. bloco seja aceito como incorreto, comprometendo o sistema. A probabilidade deste tipo de o ataque pode ser limitado com uma diversidade maior de clientes: Optimism pode reutilizar além de obter o outros clientes Ethereum já mantidos, e o desenvolvimento de outro cliente baseado em Erigon está já em andamento. Em 2016 um problema no gerenciamento de memória do geth foi explorado por um ataque DoS e a primeira linha de defesa foi recomendar o uso de Paridade, o segundo mais cliente usado na época 5. StarkNet enfrenta o mesmo problema com provas de validade, mas os clientes tem que ser escrito do zero e o sistema de provas é muito mais complexo e, conseqüentemente, também é muito mais complexo garantir a correção.

Abschluss

  1. Fazit Rollups sind heute die vielversprechendste Lösung zur Lösung des Skalierbarkeitsproblems dezentrale blockchains, die den Weg für die Ära der modularen blockchains ebnen monolithische blockchains. Hauptsächlich wird die Wahl zwischen der Entwicklung eines Optimistic Rollup oder eines Validity Rollup gezeigt als Kompromiss zwischen Komplexität und Agilität. StarkNet bietet zahlreiche Vorteile wie z. B. schnell Abhebungen, strukturelle Unfähigkeit, ungültige Zustandsübergänge durchzuführen, niedrigere Transaktionskosten bei Kosten einer längeren Entwicklungszeit und Inkompatibilität mit EVM, während dies bei Optimism der Fall ist nutzte die Netzwerkwirtschaft, um schnell einen großen Marktanteil zu erobern. Optimism Bedrock verfügt jedoch über einen modularen Aufbau, der es ermöglicht, zu einer Gültigkeit zu werden 5https://blog.ethereum.org/2016/09/22/ethereum-network-currently-undergoing-dos-attack

Rollup in der Zukunft: Cannon verwendet derzeit Minigeth, kompiliert zu MIPS, für seinen Fehlernachweis System, aber dieselbe Architektur kann verwendet werden, um eine Schaltung zu erhalten und Gültigkeitsnachweise zu erstellen. Das Kompilieren einer komplexen Maschine wie EVM für eine Mikroarchitektur führt zu einer einfacheren Lösung Schaltkreis, der im Falle von Upgrades nicht geändert und erneut überprüft werden muss. RISC Zero ist ein überprüfbare Mikroarchitektur mit STARK-Beweisen, die sich bereits in der Entwicklung befinden, basierend auf RISC-V kann hierfür alternativ zu MIPS [28] verwendet werden. Ein nicht zu unterschätzender Aspekt ist die Komplexität des Verständnisses, wie das funktioniert Technik funktioniert. Eine Stärke herkömmlicher blockchains besteht darin, den Status von überprüfen zu können den blockchain, ohne einer Drittpartei zu vertrauen. Im Fall von StarkNet ist dies jedoch der Fall Es ist notwendig, der Implementierung zu vertrauen, wenn es nicht möglich ist, die verschiedenen Komponenten zu überprüfen basierend auf Kryptographie und fortgeschrittener Mathematik. Dies kann zunächst zu Reibungen führen Einführung der Technologie, aber da die Tools und die Verwendung von Integritätsnachweisen immer weiter voranschreiten Außerhalb des Feldes blockchain wird dieses Problem hoffentlich gelöst.

Conclusão

  1. Conclusão Rollups são a solução mais promissora disponível atualmente para resolver o problema de escalabilidade em blockchains descentralizados, abrindo caminho para a era dos blockchains modulares em oposição a blockchains monolíticos. A escolha de desenvolver um Rollup Otimista ou um Rollup de Validade é mostrada principalmente como uma compensação entre complexidade e agilidade. StarkNet tem inúmeras vantagens, como rapidez retiradas, incapacidade estrutural de ter transições de estado inválidas, menor custo de transação no despesa de um período de desenvolvimento mais longo e incompatibilidade com EVM, enquanto Optimism tem alavancou a economia de rede para ganhar rapidamente uma grande fatia do mercado. Optimism Bedrock, entretanto, possui um design modular que permite que ele se torne um Validity 5https://blog.ethereum.org/2016/09/22/ethereum-network-currently-undergoing-dos-attack

Rollup no futuro: Cannon atualmente usa minigeth compilado em MIPS para sua prova de falhas sistema, mas a mesma arquitetura pode ser usada para obter um circuito e produzir provas de validade. Compilar uma máquina complexa como EVM para uma microarquitetura resulta em uma solução mais simples circuito que não precisa ser modificado e verificado novamente em caso de atualizações. RISC Zero é um microarquitetura verificável com provas STARK já em desenvolvimento com base em RISC-V que pode ser usado para esta finalidade como uma alternativa a MIPS [28]. Um aspecto que não deve ser subestimado é a complexidade em compreender como o a tecnologia funciona. Um ponto forte dos blockchains tradicionais é ser capaz de verificar o estado de o blockchain sem confiar em nenhuma entidade terceirizada. No entanto, no caso de StarkNet, é necessário confiar na implementação quando não é possível verificar os vários componentes baseado em criptografia e matemática avançada. Isto pode inicialmente criar atrito para o adoção da tecnologia, mas à medida que as ferramentas e o uso de provas de integridade avançam ainda mais fora do campo blockchain este problema será resolvido.