Optimism 技术文档

بقلم Optimism Collective · 2021

لا تمتلك Optimism ورقةً بيضاءَ تقليديةً. بوصفها rollup تفاؤلياً من الطبقة الثانية لـ Ethereum، يُوثَّق تصميمها ومواصفاتها من خلال الوثائق التقنية ومواصفات OP Stack ومنشورات البحث، بدلاً من ورقة أكاديمية رسمية واحدة.

خلاصة

تتناول هذه الورقة مشكلة قابلية التوسع في blockchains اللامركزية من خلال تحليل المفاضلة بين إنتاجية المعاملات ومتطلبات الأجهزة لتشغيل العقدة. يتم تقديم عمليات التجميع، أي تقنيات التحقق من الكتل المنفذة خارج السلسلة على السلسلة، في شكل أدلة خطأ أو صحة. نحن نقارن بين مجموعات متفائلة ومجموعات صلاحية فيما يتعلق بوقت السحب، وتكاليف المعاملات، وتقنيات التحسين، والتوافق مع النظام البيئي Ethereum. يكشف تحليلنا أن Optimism Bedrock لديه حاليًا معدل ضغط غاز يبلغ حوالي 20:1، بينما يحقق StarkNet معدل ضغط تكلفة كتابة تخزين يبلغ حوالي 24:1. نناقش أيضًا تقنيات تحسين هذه الأسعار بشكل أكبر، مثل استخدام عقود التخزين المؤقت ومرشحات Bloom. في نهاية المطاف، تسلط استنتاجاتنا الضوء على المفاضلات بين التعقيد وخفة الحركة في الاختيار بين مجموعة التفاؤل والصلاحية. الكلمات الرئيسية Blockchain، قابلية التوسع، التجميعية 1. مقدمة اكتسبت تقنية Blockchain اهتمامًا كبيرًا نظرًا لقدرتها على إحداث ثورة في مختلف الصناعات. ومع ذلك، لا تزال قابلية التوسع تمثل تحديًا كبيرًا، حيث تواجه معظم blockchain مقايضة بين قابلية التوسع واللامركزية والأمن، والتي يشار إليها عادةً باسم ثلاثية قابلية التوسع [1، 2]. لزيادة إنتاجية blockchain، الحل البسيط هو زيادة حجم الكتلة الخاصة بها. في سياق Ethereum، هذا يعني زيادة الحد الأقصى لكمية الغاز التي يمكن أن تحتويها الكتلة. نظرًا لأن كل عقدة كاملة يجب أن تتحقق من صحة كل معاملة لكل كتلة، ومع زيادة الإنتاجية، تزداد أيضًا متطلبات الأجهزة، مما يؤدي إلى مركزية أكبر للشبكة. تعمل بعض blockchain، مثل Bitcoin وEthereum، على تحسين تصميمها لتحقيق أقصى قدر من اللامركزية المعمارية، في حين تم تصميم البعض الآخر، مثل Binance Smart Chain وSolana، لتكون سريعة ورخيصة قدر الإمكان. تعمل الشبكات اللامركزية على الحد بشكل مصطنع من إنتاجية blockchain لتقليل متطلبات الأجهزة للمشاركة في الشبكة. على مر السنين، جرت محاولات لإيجاد حل للثلاثية، مثل القنوات الحكومية [3] والبلازما [4، 5]. تتميز هذه الحلول بخاصية نقل بعض الأنشطة خارج السلسلة، وربط النشاط الموجود على السلسلة بالنشاط خارج السلسلة باستخدام smart contracts، والتحقق من DLT 2023: ورشة العمل الخامسة لتكنولوجيا دفتر الأستاذ الموزع، 25-26 مايو 2023، بولونيا، إيطاليا $ [email protected] (L. Donno) https://lucadonnoh.github.io/ (L. Donno) 0000-0001-9221-3529 (L. Donno) © 2023 حقوق الطبع والنشر لهذه الورقة من قبل مؤلفيها. الاستخدام مسموح به بموجب ترخيص Creative Commons Attribution 4.0 International (CC BY 4.0). إجراءات ورشة عمل CEUR http://ceur-ws.org ISSN 1613-0073 إجراءات ورشة عمل CEUR (CEUR-WS.org) على السلسلة ما يحدث خارج السلسلة. ومع ذلك، فإن قنوات البلازما والقنوات الحكومية محدودة في دعمها للقنوات العامة smart contract. المجموعات المجمعة هي blockchains (تسمى Layer 2 أو L2) تنشر كتلها على blockchain أخرى (Layer 1 أو L1) وبالتالي ترث خصائص الإجماع وتوافر البيانات والأمان. وهي، على عكس الحلول الأخرى، تدعم الحساب التعسفي. تحتوي المجموعات المجمعة على ثلاثة مكونات رئيسية: • أجهزة التسلسل: العقد التي تتلقى معاملات التجميع من المستخدمين ودمجها في كتلة يتم إرسالها إلى Layer 1. تتكون الكتلة على الأقل من جذر الحالة (على سبيل المثال، جذر Merkle) والبيانات اللازمة لإعادة بناء الحالة والتحقق من صحتها. يحدد Layer 1...

摘要

本文通过分析交易吞吐量和运行节点的硬件要求之间的权衡,解决了去中心化 blockchain 的可扩展性问题。 Rollups,即对链下执行的区块进行链上验证的技术,以故障或有效性证明的形式呈现。我们在提款时间、交易成本、优化技术以及与 Ethereum 生态系统的兼容性方面比较了乐观汇总和有效性汇总。我们的分析表明,Optimism Bedrock 目前的气体压缩率约为 20:1,而 StarkNet 的存储写入成本压缩率约为 24:1。我们还讨论了进一步优化这些速率的技术,例如缓存合约和布隆过滤器的使用。最终,我们的结论强调了在乐观汇总和有效性汇总之间选择时复杂性和敏捷性之间的权衡。关键词 区块链、可扩展性、Rollup 1. 简介 区块链技术因其彻底改变各个行业的潜力而受到广泛关注。然而,可扩展性仍然是一个重大挑战,因为大多数 blockchain 面临可扩展性、去中心化和安全性之间的权衡,通常称为可扩展性三难困境 [1, 2]。要增加 blockchain 的吞吐量,一个简单的解决方案是增加其块大小。在 Ethereum 的上下文中,这意味着增加一个区块可以容纳的最大气体量。由于每个全节点必须验证每个块的每笔交易,因此随着吞吐量的增加,硬件要求也会增加,从而导致网络更加集中。一些 blockchain,例如 Bitcoin 和 Ethereum,优化其设计以最大化其架构去中心化,而其他 blockchain,例如币安智能链和 Solana,则被设计为尽可能快速和便宜。去中心化网络人为地限制 blockchain 的吞吐量,以降低参与网络的硬件要求。多年来,人们一直在尝试寻找解决三难困境的方法,例如状态通道 [3] 和 Plasma [4, 5]。这些解决方案的特点是将一些活动移至链下,使用 smart contracts 将链上活动与链下活动链接起来,并验证 DLT 2023:第五届分布式账本技术研讨会,2023 年 5 月 25-26 日,意大利博洛尼亚 $ [email protected] (L. Donno) https://lucadonnoh.github.io/ (L. Donno) Donno) 0000-0001-9221-3529 (L. Donno) © 2023 本文版权归其作者所有。根据 Creative Commons License Attribution 4.0 International (CC BY 4.0) 允许使用。 CEUR 研讨会论文集 http://ceur-ws.org ISSN 1613-0073 CEUR 研讨会论文集 (CEUR-WS.org) 链上发生的事情链下。然而,Plasma 和状态通道对通用 smart contract 的支持都是有限的。 Rollup 是 blockchain(称为 Layer 2 或 L2),它们在另一个 blockchain (Layer 1 或 L1)上发布其块,因此继承其共识、数据可用性和安全属性。与其他解决方案不同,它们支持任意计算。 Rollups 具有三个主要组件: • 定序器:从用户接收 Rollup 交易并将其组合成一个块并发送到 Layer 1 的节点。该块至少由状态根(例如 Merkle 根)和重建和验证状态所需的数据组成。 Layer 1 定义...

مقدمة

  1. مقدمة لقد اكتسبت تقنية Blockchain اهتمامًا كبيرًا نظرًا لقدرتها على إحداث ثورة الصناعات المختلفة. ومع ذلك، تظل قابلية التوسع تحديًا كبيرًا، كما يواجه معظم blockchains وهي مقايضة بين قابلية التوسع واللامركزية والأمن، والتي يشار إليها عادة باسم معضلة قابلية التوسع [1، 2]. لزيادة إنتاجية blockchain، الحل التافه هو لزيادة حجم الكتلة الخاصة به. في سياق Ethereum، هذا يعني زيادة الحد الأقصى كمية الغاز التي يمكن أن تحتويها الكتلة. حيث يجب على كل عقدة كاملة التحقق من صحة كل معاملة لكل عقدة كتلة، مع زيادة الإنتاجية، تزداد أيضًا متطلبات الأجهزة، مما يؤدي إلى زيادة مركزية الشبكة. تعمل بعض blockchains، مثل Bitcoin وEthereum على تحسين التصميم لتحقيق أقصى قدر من اللامركزية المعمارية، في حين أن البعض الآخر، مثل Binance Smart تم تصميم Chain وSolana ليكونا سريعين ورخيصين قدر الإمكان. الشبكات اللامركزية الحد بشكل مصطنع من إنتاجية blockchain لخفض متطلبات الأجهزة المشاركة في الشبكة. على مر السنين، جرت محاولات لإيجاد حل للثلاثية، مثل الدولة القنوات [3] والبلازما [4، 5]. وتتميز هذه الحلول بخاصية تحريك بعض النشاط خارج السلسلة، وربط النشاط الموجود على السلسلة بالنشاط خارج السلسلة باستخدام smart contracts، والتحقق DLT 2023: ورشة العمل الخامسة لتكنولوجيا دفتر الأستاذ الموزع، 25-26 مايو 2023، بولونيا، إيطاليا $ [email protected] (L. Donno) https://lucadonnoh.github.io/ (ل. دونو) 0000-0001-9221-3529 (ل. دونو) © 2023 حقوق الطبع والنشر لهذه الورقة من قبل مؤلفيها. الاستخدام مسموح به بموجب ترخيص Creative Commons Attribution 4.0 International (CC BY 4.0). CEUR ورشة عمل الإجراءات http://ceur-ws.org ISSN 1613-0073 وقائع ورشة عمل CEUR (CEUR-WS.org)على السلسلة ما يحدث خارج السلسلة. ومع ذلك، فإن قنوات البلازما وقنوات الدولة محدودة دعمهم لـ smart contracts العامة. المجموعات المجمعة هي blockchains (تسمى Layer 2 أو L2) تنشر كتلها على blockchain آخر (Layer 1 أو L1) وبالتالي ترث خصائص الإجماع وتوافر البيانات والأمان الخاصة بها. هم، على عكس الحلول الأخرى، دعم الحساب التعسفي. تحتوي المجموعات المجمعة على ثلاثة مكونات رئيسية: • التسلسل: العقد التي تتلقى المعاملات المجمعة من المستخدمين ودمجها في ملف الكتلة التي يتم إرسالها إلى Layer 1. تتكون الكتلة من جذر الحالة على الأقل (على سبيل المثال Merkle root) والبيانات اللازمة لإعادة بناء الحالة والتحقق من صحتها. يحدد Layer 1 الكنسي blockchain للL2 من خلال تحديد ترتيب البيانات المنشورة. • العقد المجمعة الكاملة: العقد التي تحصل على الكتل المجمعة وتعالجها وتتحقق من صحتها من الطبقة 1 عن طريق التحقق من صحة الجذر. إذا كانت الكتلة تحتوي على معاملات غير صالحة، فهذا هو الحال تم تجاهلها، مما يمنع أجهزة التسلسل من إنشاء كتل صالحة تتضمن غير صالحة المعاملات. • العقد الخفيفة التراكمية: العقد التي تحصل على الكتل التراكمية من Layer 1 ولكنها لا تقوم بالحساب الدولة الجديدة نفسها. يتحققون من أن جذر الحالة الجديد صالح باستخدام التقنيات مثل إثبات الخطأ أو الصحة. تحقق المجموعات المجمعة قابلية التوسع من خلال تقليل التكلفة المطفأة للمعاملات كعدد من المستخدمين يزيد. وذلك لأن تكلفة ضمان صلاحية blockchain تنمو بشكل خطي فرعي فيما يتعلق بتكلفة التحقق من المعاملات بشكل فردي. تختلف المجموعات حسب الآلية التي يتم من خلالها التأكد من صحة تنفيذ المعاملة في العقد الخفيفة: في يتم ضمان التراكمات المتفائلة من خلال النموذج الاقتصادي وإثباتات الخطأ، أثناء الصلاحية يتم ضمان المجموعات المجمعة بشكل مشفر باستخدام أدلة الصلاحية. يمكن تنفيذ العقد الخفيفة كـ smart contracts على Layer 1. يقبلون جذر حالة جديدة والتحقق من الصلاحية أو إثبات الأخطاء: لذلك تسمى هذه التحديثات بالعقد الذكي مجموعات. إذا كانت العقد الضوئية مستقلة، فإنها تسمى مجموعة Sovereign Rollups [6]. ميزة إن استخدام مجموعة العقود الذكية هو القدرة على بناء جسر ثقة بين الاثنين blockchains: بما أنه تم إثبات صحة حالة L2 إلى L1، فإن نظام المعاملات من يمكن تنفيذ L2 إلى L1، مما يسمح بالسحب. العيب هو أن تكلفة تعتمد المعاملات على تكلفة التحقق من الحالة على L1: إذا كانت الطبقة الأساسية مشبعة والأنشطة الأخرى، فإن تكلفة المعاملات في مجموعة التحديثات تزيد أيضًا. طبقات البيانات والإجماع هي التي تحدد أمان النظام فهي تحدد ترتيب المعاملات، وتمنع الهجمات، وتتيح البيانات لإثبات الحالة صلاحية. المساهمة الورقية في هذا البحث، قمنا بدراسة مجموعتي التفاؤل والصدق، وهما مبتكران حلول ثلاثية قابلية التوسع، مع التركيز على التطبيقات البارزة، مثل Optimism Bedrock وStarkNet. تتضمن مساهماتنا مقارنة شاملة لهذه الحلول وتحليل أوقات السحب ومناقشة الهجوم المحتمل على Optimism حجر الأساس. بالإضافة إلى ذلك، نقوم بحساب نسب ضغط الغاز الخاصة بها، وتوفير تحسينات خاصة بالتطبيقات، وتقديم مزايا وعيوب الابتعاد عن Ethereum الجهاز الظاهري (EVM).

هيكل الورق يتم تنظيم الورقة على النحو التالي. في القسم 2 التراكمية المتفائلة هي تم تقديمه من خلال تحليل Optimism حجر الأساس. في القسم 3، يتم تقديم مجموعات الصلاحية بواسطة تحليل StarkNet. في القسم 4 نقارن بين الحلين. وأخيرا، في القسم 5 نرسم بعض الاستنتاجات.

介绍

一、简介 区块链技术因其革命性的潜力而受到广泛关注 各个行业。然而,可扩展性仍然是一个重大挑战,因为大多数 blockchain 都面临着 可扩展性、去中心化和安全性之间的权衡,通常称为 可扩展性三难困境 [1, 2]。为了提高 blockchain 的吞吐量,一个简单的解决方案是 增加其块大小。在 Ethereum 的上下文中,这意味着增加最大值 一个区块可以容纳的气体量。由于每个全节点必须验证每个交易的每笔交易 块,随着吞吐量的增加,硬件要求也增加,导致更大的 网络的集中化。一些 blockchain,例如 Bitcoin 和 Ethereum,优化了它们的 设计以最大化其架构去中心化,而其他人,例如 Binance Smart Chain 和 Solana 的设计目标是尽可能快速且便宜。去中心化网络 人为地限制 blockchain 的吞吐量,以降低硬件要求 参与网络。 多年来,人们一直在尝试寻找解决三难困境的方法,例如国家 通道 [3] 和 Plasma [4, 5]。这些解决方案具有移动某些活动的特点 链下,使用 smart contracts 将链上活动链接到链下活动,并验证 DLT 2023:第五届分布式账本技术研讨会,2023 年 5 月 25-26 日,意大利博洛尼亚 $ [email protected] (L. Donno) https://lucadonnoh.github.io/ (L. Donno) 0000-0001-9221-3529(L.唐诺) © 2023 本文版权归作者所有。根据 Creative Commons License Attribution 4.0 International (CC BY 4.0) 允许使用。 欧洲欧元区 车间 会议记录 http://ceur-ws.org ISSN 1613-0073 CEUR 研讨会论文集 (CEUR-WS.org)链上正在发生链下的事情。然而,Plasma 和状态通道都受到限制 他们对 smart contract 将军的支持。 Rollup 是 blockchain(称为 Layer 2 或 L2),它们在另一个 blockchain 上发布其块 (Layer 1 或 L1),因此继承其共识、数据可用性和安全属性。他们, 与其他解决方案不同,支持任意计算。 Rollup 具有三个主要组件: • 排序器:从用户接收 Rollup 交易并将其组合成一个 发送到 Layer 1 的块。该块至少包含状态根(例如 Merkle root)以及重建和验证状态所需的数据。 Layer 1 定义 通过建立已发布数据的排序来规范 L2 的 blockchain 。 • Rollup全节点:从Layer获取、处理和验证Rollup块的节点 1、验证root是否正确。如果一个区块包含无效交易,那么 丢弃,这会阻止定序器创建包含无效块的有效块 交易。 • Rollup轻节点:从Layer 1获取Rollup块但不计算的节点 新国家本身。他们使用技术验证新的状态根是否有效 例如错误或有效性证明。 Rollups 通过将交易的摊余成本降低为数量来实现可扩展性 用户数量增加。这是因为确保 blockchain 有效性的成本呈次线性增长 关于单独验证交易的成本。汇总根据不同而不同 他们确保轻节点交易执行有效性的机制: Optimistic Rollups 通过经济模型和故障证明来保证,同时保持有效性 Rollups 使用有效性证明以加密方式确保。 轻节点可以在 Layer 1 上实现为 smart contracts。他们接受事物的根源 新状态并验证有效性或故障证明:因此这些 Rollup 称为智能合约 卷起。如果轻节点是独立的,则它们被称为主权卷[6]。优点 使用智能合约 Rollup 是为了能够在两者之间建立信任最小化的桥梁 blockchains:由于 L2 状态的有效性已向 L1 证明,因此交易系统 可以实现L2到L1,允许提现。缺点是成本较高 交易取决于验证 L1 状态的成本:如果基础层饱和 其他活动中,Rollup 上的交易成本也会增加。 数据层和共识层决定了系统的安全性 他们定义交易的顺序,防止攻击并提供数据来证明状态 有效性。 论文贡献 在本文中,我们研究了乐观和有效性汇总,这两个创新 可扩展性难题的解决方案,重点关注值得注意的实现,例如 Optimism Bedrock 和 StarkNet。我们的贡献包括对这些的全面比较 解决方案、提现时间分析以及对 Optimism 可能的攻击的讨论 基岩。此外,我们还计算它们的气体压缩比,提供特定于应用的优化,并介绍放弃 Ethereum 的优点和缺点 虚拟机 (EVM)。

纸张结构 本文的结构如下。在第 2 节中,乐观汇总是 通过分析 Optimism 基岩引入。在第 3 节中,有效性汇总由 分析 StarkNet。在第 4 节中,我们比较了这两种解决方案。最后,在第 5 节中我们绘制 一些结论。

التراكمات المتفائلة

  1. مجموعات متفائلة إن فكرة القبول المتفائل لمخرجات الكتل دون التحقق من تنفيذها هي موجودة بالفعل في Bitcoin المستند التقني [7]، الذي يناقش العقد الضوئية. هذه العقد تتبع فقط سلسلة الرأس عن طريق التحقق من قاعدة الإجماع، مما يجعلها عرضة لقبول الكتل تحتوي على معاملات غير صالحة في حالة حدوث هجوم بنسبة 51%. يقترح ناكاموتو حل هذه المشكلة حل المشكلة باستخدام نظام "تنبيه" لتحذير العقد الخفيفة من أن الكتلة تحتوي على معاملات غير صالحة. هذه الآلية يطبقها لأول مرة البسام وسونينو وبوتيرين [8] فيها خطأ يتم استخدام نظام إثبات يعتمد على رموز تصحيح الأخطاء [9]. من أجل تمكين إنشاء إثباتات الأخطاء، من الضروري أن تكون البيانات من جميع الكتل، بما في ذلك الكتل غير الصالحة، متاحة لـ الشبكة: وهي مشكلة توفر البيانات، والتي يتم حلها باستخدام البيانات الاحتمالية آلية أخذ العينات. أول تصميم متفائل تم تقديمه بواسطة جون أدلر و Mikerah Quintyne-Collins في عام 2019 [10]، حيث يتم نشر الكتل على blockchain آخر الذي يحدد إجماعهم على الطلب. 2.1. Optimism حجر الأساس Bedrock [11] هو أحدث إصدار من Optimism، مجموعة العقود الذكية. الإصدار السابق، تتطلب الآلة الافتراضية المتفائلة (OVM) مترجمًا مخصصًا لتجميع Solidity في نظامها رمز البايت الخاص: في المقابل، فإن Bedrock يعادل تمامًا EVM من حيث محرك التنفيذ يتبع Ethereum مواصفات الورق الأصفر [12]. 2.1.1. الودائع يمكن للمستخدمين إيداع المعاملات من خلال عقد على Ethereum، بوابة Optimism، عن طريق استدعاء وظيفة الإيداع. عند تنفيذ المعاملة، أ يتم إطلاق حدث TransactionDeposited، والذي تستمع إليه كل عقدة في مجموعة التحديثات لمعالجته الودائع. المعاملة المودعة هي معاملة L2 مشتقة من L1. إذا كان المتصل الوظيفة عقد، يتم تحويل العنوان بإضافة قيمة ثابتة إليه: وهذا يمنع الهجمات التي يكون فيها العقد الموجود على L1 له نفس عنوان العقد الموجود على L2 ولكن برمز مختلف. يتم ضمان التضمين في L2 للمعاملة المودعة من خلال المواصفات ضمن التسلسل نافذة. المعاملات المودعة هي نوع معاملة جديد متوافق مع EIP-2718 [13] مع البادئة 0x7E، حيث تكون الحقول المشفرة بـ rlp: • bytes32 sourceHash: hash الذي يحدد مصدر المعاملة بشكل فريد. • العنوان من : عنوان المرسل . • العنوان إلى: عنوان المستلم، أو العنوان الصفري إذا كانت المعاملة المودعة هي a إنشاء العقد.• uint256 mint: القيمة التي سيتم إنشاؤها على L2. • قيمة uint256: القيمة التي سيتم إرسالها إلى المستلم. • بايتات البيانات: بيانات الإدخال. • BytesgasLimit: حد الغاز للمعاملة. يتم حساب sourceHash باعتباره keccak256 hash للكتلة L1 hash وسجل L1 مؤشر، يحدد بشكل فريد حدثًا في الكتلة. نظرًا لأن المعاملات المودعة تبدأ على L1 ويتم تنفيذها على L2، فإن النظام يحتاج إلى آلية الدفع على L1 مقابل الغاز الذي يتم إنفاقه على L2. أحد الحلول هو إرسال ETH عبر البوابة، ولكن هذا يعني أنه يجب وضع علامة على كل متصل (حتى المتصلين غير المباشرين) على أنه مستحق الدفع، وهذا هو الحال غير ممكن للعديد من المشاريع القائمة. البديل هو حرق الغاز المقابل على L1. يسمى الغاز 𝑔المخصص للمعاملة المودعة بالغاز المضمون. سعر الغاز L2 لا تتم مزامنة L1 تلقائيًا ولكن يتم تقديره باستخدام آلية مشابهة لـ EIP-1559 [14]. الحد الأقصى لكمية الغاز المضمونة لكل كتلة Ethereum هي 8 ملايين، مع وجود هدف من 2 مليون. الكمية 𝑐‏ من ETH المطلوبة لدفع ثمن الغاز على L2 هي 𝑐= 𝑔𝑏L2 حيث 𝑏L2 هو رسوم الأساس على L2. العقد على L1 يحرق كمية من الغاز تساوي 𝑐/𝑏L2. قضى الغاز للاتصال يتم تعويض معاملة الإيداع على L2: إذا كان هذا المبلغ أكبر من الغاز المضمون، لا يتم حرق الغاز. المعاملة الأولى لكتلة rollup هي معاملة مودعة لسمات L1، تُستخدم للتسجيل على L2، قم بالنشر المسبق لسمات الكتل Ethereum. السمات التي يوفرها النشر المسبق الوصول إليها هو رقم الكتلة والطابع الزمني والرسوم الأساسية والكتلة hash والتسلسل الرقم، وهو رقم كتلة L2 بالنسبة إلى كتلة L1 المرتبطة (وتسمى أيضًا العصر)؛ تتم إعادة تعيين هذا الرقم عند بدء حقبة جديدة. 2.1.2. التسلسل تستمد العقد المجمعة سلسلة Optimism بالكامل من Ethereum. هذه السلسلة ممتدة في كل مرة يتم نشر معاملات جديدة على L1، ويتم إعادة تنظيم كتلها في كل مرة تمت إعادة تنظيم كتل Ethereum. يتم تقسيم مجموعة التحديثات blockchain إلى فترات. لكل 𝑛 رقم الكتلة Ethereum، هناك 𝑛epoch مناظر. كل عصر يحتوي على واحد على الأقل كتلة، وكل كتلة في حقبة تحتوي على معاملة L1 المودعة. الكتلة الأولى في عصر ما يحتوي على جميع المعاملات المودعة من خلال البوابة. قد يتم أيضًا حظر Layer 2 تحتوي على معاملات متسلسلة، أي المعاملات المرسلة مباشرة إلى جهاز التسلسل. يقبل جهاز التسلسل المعاملات من المستخدمين ويبني الكتل. لكل كتلة، فإنه يبني دفعة سيتم نشرها في Ethereum. يمكن نشر عدة دفعات بشكل مضغوط، أخذ اسم القناة. يمكن تقسيم القناة إلى عدة إطارات، إذا كانت كبيرة جدًا معاملة واحدة. يتم تعريف القناة على أنها الضغط باستخدام ZLIB [15] لـ rlp المشفر دفعات. حقول الدُفعة هي رقم العصر، العصر hash، الأصل hash، الطابع الزمني وقائمة المعاملات. تحتوي نافذة التسلسل، التي يتم تحديدها بواسطة عصر ما، على رقم ثابت 𝑤من L1 المتتالي الكتل التي تأخذها خطوة الاشتقاق كمدخل لإنشاء عدد متغير من كتل L2. ل في العصر 𝑛، تتضمن نافذة التسلسل 𝑛 الكتل [𝑛، 𝑛+𝑤). وهذا يعني أن الترتيب لا يتم إصلاح معاملات L2 والكتل داخل نافذة التسلسل حتى تنتهي النافذة. تُسمى المعاملة rollup بأنها آمنة إذا تم تأكيد الدفعة التي تحتوي عليها على L1. إطاراتتتم قراءتها من كتل L1 لإعادة بناء الدُفعات. التنفيذ الحالي لا يسمح يبدأ ضغط القناة حتى يتم استقبال جميع الإطارات المقابلة. غير صالح يتم تجاهل الدفعات. يتم الحصول على معاملات الكتلة الفردية من الدُفعات يستخدمه محرك التنفيذ لتطبيق انتقالات الحالة والحصول على حالة الإظهار. 2.1.3. عمليات السحب من أجل معالجة عمليات السحب، يتم تطبيق نظام المراسلة من L2 إلى L1. Ethereum يحتاج إلى معرفة حالة L2 لقبول عمليات السحب، ويتم ذلك عن طريق النشر في Oracle Output L2 smart contract على L1 جذر الحالة لكل كتلة L2. هذه الجذور يتم قبولها بشكل متفائل على أنها صالحة (أو نهائية) إذا لم يتم إجراء إثبات خطأ أثناء فترة النزاع. يمكن فقط للعناوين المعينة كمقترحين نشر جذور المخرجات. الصلاحية يتم تحفيز جذور الإنتاج من خلال مطالبة مقدمي العروض بإيداع حصة يتم قطعها إذا قاموا بذلك تبين أنه اقترح جذرًا غير صالح. تبدأ المعاملات عن طريق استدعاء الدالة قم ببدء السحب عند النشر المسبق على L2 ثم تم الانتهاء منه على L1 عن طريق استدعاء الوظيفة FinalizeWithdrawalTransaction على بوابة Optimism المذكورة سابقًا. يتم الحصول على جذر الإخراج المقابل لكتلة L2 من L2 Output Oracle؛ إنه كذلك التحقق من أنه تم الانتهاء منه، أي أن فترة النزاع قد انقضت؛ تم التحقق من أن الإخراج يتطابق إثبات الجذر مع Oracle Proof؛ تم التحقق من تضمين hash الخاص بالسحب فيه باستخدام إثبات السحب؛ وأن الانسحاب لم يتم الانتهاء منه بالفعل؛ ومن ثم يتم تنفيذ الاتصال بالعنوان المستهدف، مع حد الغاز المحدد وكمية الأثير والبيانات. 2.1.4. المدفع: نظام إثبات الخطأ إذا اكتشفت عقدة التجميع الكاملة ذلك، من خلال تنفيذ الدفعات والمعاملات المودعة محليًا الحالة Layer 2 لا تتطابق مع جذر الحالة المنشور على السلسلة بواسطة مقدم العرض، ويمكن تنفيذها دليل خطأ على L1 لإثبات أن نتيجة انتقال الكتلة غير صحيحة. بسبب بشكل عام، تعد معالجة كتلة القيمة المحتسبة بالكامل على L1 مكلفة للغاية. تم تنفيذ الحل بواسطة Bedrock هو تنفيذ التعليمات الأولى للخلاف في minigeth على السلسلة فقط، تجميعها في بنية MIPS التي يتم تنفيذها على مترجم على السلسلة ونشرها على L1. minigeth هو نسخة مبسطة من geth 1 حيث يتم تضمين الإجماع وRPC وقاعدة البيانات تمت إزالتها. للعثور على تعليمات الخلاف الأولى، يتم إجراء بحث ثنائي تفاعلي بين الشخص الذي بدأ إثبات الخطأ والذي نشر جذر الإخراج. عندما يكون الدليل يبدأ كلا الطرفين بنشر جذر حالة الذاكرة MIPS في منتصف عملية التنفيذ الحظر في عقد التحدي: إذا كان hash يتطابق فهذا يعني أن الطرفين يتفقان على النصف الأول من التنفيذ وبذلك ينشر جذر نصف النصف الثاني، وإلا النصف يتم نشر النصف الأول وهكذا. إن القيام بذلك يحقق التعليمات الأولى للخلاف في عدد لوغاريتمي من الخطوات مقارنة بالتنفيذ الأصلي. فإذا توقف أحد الأمرين التفاعل، في نهاية فترة النزاع، يفوز المشارك الآخر تلقائيًا. لمعالجة التعليمات، يحتاج المترجم MIPS إلى الوصول إلى ذاكرته: نظرًا لأن الجذر هو المتاحة، يمكن نشر خلايا الذاكرة اللازمة عن طريق إثبات إدراجها. للوصول حالة EVM، يتم استخدام Preimage Oracle: بالنظر إلى hash للكتلة التي يتم إرجاعها 1https://geth.ethereum.org/docs

رأس الكتلة، والذي يمكن من خلاله الحصول على hash من الكتلة السابقة والعودة إلى chain، أو احصل على hash للحالة والسجلات التي يمكن من خلالها الحصول على الصورة الأولية. oracle يتم تنفيذه بواسطة Minigeth ويحل محل قاعدة البيانات. يتم إجراء الاستعلامات إلى العقد الأخرى ل الحصول على الصور الأولية.

乐观汇总

  1. 乐观汇总 乐观地接受块的输出而不验证其执行的想法是 已经出现在 Bitcoin 白皮书 [7] 中,讨论了轻节点。这些节点仅遵循 头链通过验证共识规则,使它们容易受到接受块的影响 包含发生 51% 攻击时无效的交易。中本聪提议解决这个问题 通过使用“警报”系统来警告轻节点某个区块包含无效交易来解决这个问题。 该机制首先由 Al-Bassam、Sonnino 和 Buterin [8] 实现,其中一个故障 使用基于纠错码[9]的证明系统。为了能够创建 故障证明,所有块(包括无效块)的数据都必须可用 网络:这是数据可用性问题,可以使用概率数据来解决 抽样机制。第一个 Optimistic Rollup 设计由 John Adler 提出, Mikerah Quintyne-Collins 在 2019 年 [10],其中区块发布在另一个 blockchain 上 这定义了他们对订购的共识。 2.1. Optimism 基岩 Bedrock [11] 是 Optimism(智能合约汇总)的最新版本。之前的版本, 乐观虚拟机 (OVM) 需要一个临时编译器将 Solidity 编译到其 自己的字节码:相比之下,Bedrock 完全等同于 EVM ,因为执行引擎 遵循 Ethereum 黄皮书规范 [12]。 2.1.1.存款 用户可以通过调用depositTransaction函数,通过Ethereum(Optimism门户)上的合约存入交易。 当一笔交易被执行时, 发出 TransactionDeposited 事件,Rollup 中的每个节点都会监听该事件并进行处理 存款。存入交易是源自 L1 的 L2 交易。如果呼叫者 函数是一个合约,地址通过添加一个常量值来转换:这可以防止 L1 上的合约与 L2 上的合约具有相同地址但代码不同的攻击。 存储交易包含在 L2 中是通过排序中的规范来确保的 窗口。 存入交易是新的EIP-2718兼容交易类型[13],前缀为0x7E, 其中 rlp 编码字段是: • bytes32 sourceHash:hash,唯一标识交易源。 • 地址来自:发件人的地址。 • 地址:接收者地址,或零地址(如果存入的交易是 合同创建。• uint256 mint:要在L2 上创建的值。 • uint256 值:要发送给接收者的值。 • 字节数据:输入数据。 • bytes GasLimit:交易的gas 限制。 sourceHash 计算为 L1 块 hash 的 keccak256 hash 和 L1 日志 索引,唯一标识块中的事件。 由于存入的交易是在L1上发起但在L2上执行的,所以系统需要一个 向 L1 支付 L2 所花费的 Gas 的机制。一种解决方案是通过门户发送 ETH, 但这意味着每个呼叫者(甚至间接呼叫者)都必须标记为应付,这是 对于许多现有项目来说这是不可能的。另一种方法是在 L1 上燃烧相应的气体。 分配给存入交易的gas𝑔称为保证gas。 L2 汽油价格 L1 不会自动同步,而是使用类似于 EIP-1559 的机制进行估计 [14]。每个 Ethereum 区块保证的最大 Gas 量为 800 万,目标 200万。在 L2 上支付 Gas 费用所需的 ETH 数量为 𝑐= 𝑔𝑏L2,其中 𝑏L2 是 L2 的基本费用。 L1 上的合约燃烧的 Gas 量等于 𝑐/𝑏L2。打电话所花费的gas 存款交易在 L2 上偿还:如果该金额大于保证气体, 没有气体被燃烧。 rollup区块的第一笔交易是L1属性存入交易,用于注册 在 L2 上预部署 Ethereum 块的属性。预部署提供的属性 访问的是区块号、时间戳、基本费用、区块 hash 和序列 number,L2 相对于关联的 L1 区块的区块编号(也称为纪元); 当新纪元开始时,该数字会重置。 2.1.2.测序 Rollup 节点完全从 Ethereum 派生出 Optimism 链。这条链条被延长了 每次在 L1 上发布新交易时,每次都会重新组织其区块 Ethereum 块被重新组织。 Rollup blockchain 分为多个纪元。对于每个 𝑛 区块号为Ethereum,有对应的𝑛纪元。每个纪元至少包含一个 一个 epoch 中的每个区块都包含一个 L1 属性的存入交易。第一个区块 一个纪元包含通过门户存入的所有交易。 Layer 2 块也可能 包含排序交易,即直接发送到排序器的交易。 排序器接受用户的交易并构建区块。对于每个块,它构造 一批将在 Ethereum 上发布。可以以压缩方式发布多个批次, 采取名称频道。一个通道可以分成几个帧,以防通道太大 单笔交易。通道被定义为使用 RLP 编码的 ZLIB [15] 进行压缩 批次。批次的字段包括纪元号、纪元 hash、父代 hash、 时间戳和交易列表。 一个由 epoch 标识的排序窗口,包含固定数量 𝑤 的连续 L1 推导步骤将其作为输入来构造可变数量的 L2 块。对于 纪元𝑛,排序窗口𝑛包括块[𝑛,𝑛+𝑤)。这意味着排序 排序窗口内的 L2 事务和块的数量直到窗口结束才固定。 如果包含 rollup 的交易已在 L1 上得到确认,则该交易被称为安全交易。镜框从 L1 块中读取以重建批次。当前的实现不允许 开始对通道进行解压缩,直到接收到所有相应的帧。无效 批次被忽略。单个区块交易是从批次中获得的,这些交易是 执行引擎使用它来应用状态转换并获取 Rollup 状态。 2.1.3.提款 为了处理提款,实施了 L2 到 L1 消息传递系统。 Ethereum 需要知道 L2 的状态才能接受提款,这是通过发布来完成的 L2 输出 Oracle smart contract 在 L1 上每个 L2 块的状态根。这些根 如果在期间没有执行故障证明,则乐观地认为是有效的(或最终确定的) 争议期。只有指定为提议者的地址才能发布输出根。有效性 的输出根是通过让提案者存入股份来激励的,如果他们 显示提出了无效的根。交易是通过调用该函数发起的 在 L2 上的预部署上启动撤回,然后通过调用该函数在 L1 上完成 FinalizeWithdrawalTransaction 在前面提到的 Optimism 门户上。 从L2 Output Oracle中获取L2块对应的输出根;是的 核实已最终确定,即争议期已过;经验证,输出 根证明与预言机证明相匹配;经核实,已包含提款的hash 使用提款证明;撤回尚未最终确定;然后是 使用指定的气体限制、以太币数量和数据执行对目标地址的调用。 2.1.4. Cannon:防故障系统 如果 Rollup Full Node 通过本地执行批次和存入交易发现 Layer 2 状态与提议者在链上发布的状态根不匹配,它可以执行 L1 上的故障证明,证明块转换的结果不正确。因为 开销,在 L1 上处理整个 Rollup 块的成本太高。实施的解决方案 by Bedrock 的目的是仅在链上执行 minigeth 不一致的第一条指令, 将其编译成 MIPS 架构,在链上解释器上执行并发布 在 L1 上。 minigeth是geth 1的简化版本,其中共识、RPC和数据库 已被删除。 为了找到第一个不一致的指令,在之间进行交互式二分搜索 发起故障证明的人和发布输出根的人。当证明 开始,双方在执行中途发布 MIPS 内存状态的根 挑战合约上的区块:如果 hash 匹配,则意味着双方都同意 执行的前半部分,从而发布后半部分的根,否则一半 上半年已出版等等。这样做就实现了第一个分歧指令 与原始执行相比,步骤数为对数。如果两者之一停止 互动时,在争议期结束时,另一方自动获胜。 为了处理该指令,MIPS 解释器需要访问其内存:因为根是 可用时,可以通过证明其包含性来发布必要的存储单元。访问 EVM 的状态,使用原像 Oracle:给定它返回的块的 hash 1https://geth.ethereum.org/docs

块头,从中可以获取前一个块的 hash 并返回到 链,或者获取可以获取原像的状态和日志的 hash 。 oracle 由minigeth实现并取代数据库。向其他节点进行查询 获得原像。

تراكمات الصلاحية

  1. مجموعات الصلاحية الهدف من مجموعة الصلاحية هو إثبات صحة انتقال الحالة بشكل مشفر نظرا لتسلسل المعاملات مع برهان قصير يمكن التحقق منه خطيا مقارنة إلى وقت الحسابات الأصلية. يُطلق على هذا النوع من الشهادات اسم إثباتات التكامل الحسابي ويتم تنفيذها عمليًا باستخدام SNARKs (وسيطة المعرفة غير التفاعلية المختصرة)، والتي تستخدم العمليات الحسابية الدوائر كنموذج حسابي لها. تختلف تطبيقات SNARK المختلفة في وقت الإثبات، وقت التحقق، والحاجة إلى إعداد موثوق به ومقاومة كمية [16، 17]. ستاركس (قابلة للتطوير حجة المعرفة الشفافة) [18] هي نوع من SNARKs التي لا تتطلب وسيطًا موثوقًا به الإعداد ومقاومة الكم، مع التخلي عن بعض الكفاءة في الإثبات والتحقق مقارنة بالحلول الأخرى. 3.1. StarkNet StarkNet عبارة عن مجموعة من صلاحية العقد الذكي تم تطويرها بواسطة StarkWare والتي تستخدم STARK نظام إثبات للتحقق من صحة حالته إلى Ethereum. لتسهيل بناء أدلة الصحة، أ يتم استخدام جهاز افتراضي مختلف عن EVM، ولغته عالية المستوى هي القاهرة. 3.1.1. الودائع يمكن للمستخدمين إيداع المعاملات عبر عقد على Ethereum عن طريق الاتصال بـ sendMessageToL2 وظيفة. يتم تسجيل الرسالة عن طريق حساب hash وزيادة العداد. التسلسل استمع إلى حدث LogMessageToL2 وقم بتشفير المعلومات في معاملة StarkNet يستدعي وظيفة العقد الذي يحتوي على ديكور l1_handler. وفي نهاية التنفيذ، عندما يتم إنتاج إثبات انتقال الحالة، يتم إرفاق استهلاك الرسالة به ويتم حذفه بتقليل عداده. إن إدراج المعاملات المودعة ليس مطلوبًا بموجب مواصفات StarkNet، لذا فهو غاز هناك حاجة إلى السوق لتحفيز التسلسلات لنشرها على L2. في الإصدار الحالي، لأن يتم التحكم في جهاز التسلسل بشكل مركزي وإدارته بواسطة StarkWare، وهي تكلفة المعاملات المودعة يتم تحديده فقط من خلال تكلفة تنفيذ الإيداع. يتم دفع هذه التكلفة عن طريق إرسال ETH إلى sendMessageToL2. تظل هذه الإثيرات مقفلة على L1 ويتم نقلها إلى جهاز التسلسل L1، عندما يتم تضمين المعاملة المودعة في انتقال الحالة. مبلغ ETH المرسل، إذا يتم تضمين المعاملة المودعة، وإنفاقها بالكامل، بغض النظر عن كمية الغاز المستهلكة على L2. لا يحتوي StarkNet على نظام يجعل سمات كتلة L1 متاحة تلقائيًا. وبدلاً من ذلك، فإن Fossil هو بروتوكول تم تطويره بواسطة Oiler Network 2 والذي يسمح، بالنظر إلى hash من منع أي معلومات يمكن الحصول عليها من Ethereum عن طريق نشر الصور الأولية. 2https://www.oiler.network/3.1.2. التسلسل يمكن اشتقاق الحالة الحالية لـ StarkNet بالكامل من Ethereum. أي اختلاف الدولة يتم نشر بين التحولات على L1 كبيانات الاتصال. يتم نشر الاختلافات لكل عقد ويتم حفظها كـ uint256[] بالتشفير التالي: • عدد الحقول المتعلقة بعمليات نشر العقد. • لكل عقد منشور: – عنوان العقد المنشور. – hash للعقد المنشور. – عدد حجج منشئ العقد.
  2. قائمة وسيطات المنشئ • عدد العقود التي تم تعديل تخزينها. • لكل عقد تم تعديله: – عنوان العقد المعدل. – عدد تحديثات التخزين.
  3. أزواج القيمة الرئيسية لعناوين التخزين مع القيم الجديدة. يتم نشر اختلافات الحالة بالترتيب، لذلك يكفي قراءتها بالتسلسل إعادة بناء الدولة. 3.1.3. عمليات السحب لإرسال رسالة من L2 إلى L1، يتم استخدام syscall send_message_to_L1. الرسالة هي تم نشره إلى L1 عن طريق زيادة عداد hash مع الدليل وتم الانتهاء منه عن طريق استدعاء الدالة ConsumerMessageFromL2 على StarkGate smart contract على L1، مما يتناقص العداد. يمكن لأي شخص وضع اللمسات الأخيرة على أي انسحاب. 3.1.4. إثباتات الصلاحية تم تصميم جهاز القاهرة الافتراضي [19] لتسهيل إنشاء براهين ستارك. تسمح لغة القاهرة بوصف العمليات الحسابية ببرمجة عالية المستوى اللغة، وليس مباشرة كدائرة. يتم تحقيق ذلك من خلال نظام المعادلات متعددة الحدود 3 يمثل حسابًا واحدًا: دورة FDE لهندسة فون نيومان. الرقم وبالتالي فإن القيود ثابتة ومستقلة عن نوع الحساب، مما يسمح بواحد فقط برنامج التحقق لكل برنامج يحتاج إلى إثبات حسابه. يقوم StarkNet بتجميع معاملات متعددة في دليل STARK واحد باستخدام مُثبت مشترك اسمه شارب. يتم إرسال البراهين إلى smart contract على Ethereum، والذي يتحقق من صحتها ويقوم بتحديث جذر Merkle المطابق للحالة الجديدة. التكلفة الخطية الفرعية للتحقق أ يسمح إثبات الصلاحية بإطفاء تكلفته على معاملات متعددة. 3 يسمى التمثيل الجبري المتوسط ​​(AIR)

有效性汇总

  1. 有效性汇总 有效性汇总的目标是以密码方式证明状态转换的有效性 给定具有可进行亚线性比较验证的简短证明的交易序列 到原始计算的时间。 此类证书称为计算完整性证明,实际上是通过 SNARK(简洁非交互式知识论证)实现的,它使用算术 电路作为他们的计算模型。不同的 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 上发布它们。在当前版本中,因为 Sequencer 由 StarkWare 集中管理,存入交易的成本 仅由执行存款的成本决定。该费用通过将 ETH 发送至 发送消息到L2。这些以太币仍然锁定在 L1 上,并在 L1,当存入的交易包含在状态转换中时。发送的 ETH 数量,如果 无论消耗的 Gas 量如何,存入的交易都已包含在内并已全部花费 在 L2 上。 StarkNet 没有一个系统可以自动使 L1 块属性可用。 另外,Fossil 是由 Oiler Network 2 开发的协议,允许给定 hash 块,通过发布原像从 Ethereum 获得的任何信息。 2https://www.oiler.network/3.1.2.测序 StarkNet 的当前状态可以完全从 Ethereum 导出。任何状态差异 转换之间作为 calldata 在 L1 上发布。每个合同的差异均已公布 并保存为 uint256[],编码如下: • 涉及合同部署的领域数量。 • 对于每份已发布的合同: – 已发布合约的地址。 – 已发布合同的 hash。 – 合约构造函数的参数数量。 – 构造函数参数列表 • 存储已修改的合约数量。 • 对于每份已修改的合同: – 修改后的合约的地址。 – 存储更新的数量。 – 存储地址与新值的键值对。 状态差异是按顺序发布的,因此按顺序读取它们就足够了 重建国家。 3.1.3.提款 要从 L2 向 L1 发送消息,请使用系统调用 send_message_to_L1。消息是 通过增加其 hash 计数器以及证明来发布到 L1,并通过调用 L1 上 StarkGate smart contract 上的函数 ConsumerMessageFromL2 会递减 柜台。任何人都可以完成任何提款。 3.1.4.有效性证明 Cairo 虚拟机 [19] 旨在促进 STARK 证明的构建。 开罗语言允许用高级编程来描述计算 语言,而不是直接作为电路。这是通过多项式方程组来完成的 3 代表单个计算:冯诺依曼架构的 FDE 循环。数量 因此,约束的数量是固定的,并且与计算类型无关,仅允许一个 每个需要证明其计算的程序的验证程序。 StarkNet 使用共享证明者将多个交易聚合到单个 STARK 证明中 名为夏普。证明将发送至 Ethereum 上的 smart contract,以验证其有效性 并更新与新状态对应的 Merkle 根。验证一个的次线性成本 有效性证明允许其成本在多个交易中摊销。 3称为代数中间表示(AIR)

مقارنة

  1. المقارنة 4.1. وقت الانسحاب الجانب الأكثر أهمية الذي يميز مجموعات التفاؤل عن مجموعات الصلاحية هو الوقت المنقضي بين بدء عملية الانسحاب ووضع اللمسات النهائية عليها. في كلتا الحالتين، تتم تهيئة عمليات السحب على L2 والانتهاء منها على L1. في StarkNet، يمكن الانتهاء من ذلك بمجرد قبول إثبات صحة جذر الحالة الجديد في Ethereum: من الناحية النظرية، فهو كذلك من الممكن سحب الأموال في المجموعة الأولى من L1 بعد التهيئة. في الممارسة العملية، تردد إرسال إثباتات الصلاحية على Ethereum عبارة عن مفاضلة بين سرعة البلوك وضع اللمسات النهائية وتجميع الأدلة. يوفر StarkNet حاليًا أدلة صحة للتحقق كل 10 ساعات 4، ولكن المقصود أن تنخفض مع زيادة نشاط المعاملات. في Optimism Bedrock من الممكن إنهاء الانسحاب فقط في نهاية النزاع (حاليًا 7 أيام)، وبعدها يعتبر الجذر صالحًا تلقائيًا. طول يتم تحديد هذه الفترة بشكل أساسي من خلال حقيقة أنه يمكن فرض الرقابة على أدلة الأخطاء على Ethereum حتى نهايتها. تتناقص احتمالية نجاح هذا النوع من الهجمات بشكل كبير مع مرور الوقت: ه[القيمة المطروحة] = 𝑉𝑝𝑛 حيث 𝑛 هو عدد الكتل في الفترة، و𝑉 هو مقدار الأموال التي يمكن طرحها عن طريق نشر جذر غير صالح، و𝑝 هو احتمال إجراء الرقابة بنجاح الهجوم في كتلة واحدة. لنفترض أن هذا الاحتمال هو 99%، أن القيمة مؤمنة في التراكمي هو مليون إيثر، وأن الكتل في فترة زمنية هي 1800 (6 ساعات من الكتل مع 12 الفاصل الزمني للثواني): القيمة المتوقعة هي حوالي 0.01391 إيثر. أصبح النظام آمنًا بواسطة مطالبة مقدمي العروض بالحصول على كمية أكبر بكثير من الأثير من القيمة المتوقعة. وينزر وآخرون. أظهر كيفية تنفيذ هجوم الرقابة باستخدام smart contract بسيط يضمن عدم تغيير مناطق معينة من الذاكرة في الحالة [20]. نمذجة الهجوم باعتبارها لعبة ماركوف، توضح الورقة أن الرقابة هي الإستراتيجية السائدة للعقلانية منتج الكتلة إذا حصل على تعويض أكبر من تضمين المعاملة التي تتغير الذاكرة. يمكن اعتبار قيمة 𝑝‏ التي تمت مناقشتها أعلاه كنسبة مئوية من الكتلة النسبية المنتجين في الشبكة، حيث "العقلاني" لا يأخذ بعين الاعتبار احتمال معاقبة العوامل الخارجية، مثل انخفاض الثقة في blockchain مما يقلل من قيمة العملة المشفرة الخاصة بها. يقدم الكود التالي smart contract الذي يمكن استخدامه لتنفيذ هجوم الرقابة على حجر الأساس. يستغل الهجوم حوافز منتجي الكتل من خلال تقديم رشوة لهم فرض رقابة على المعاملات التي من شأنها تعديل أجزاء معينة من الدولة. العقد الرئيسي تسمح وظيفة "المطالبة بالرشوة" لمنتجي الكتل بالمطالبة بالرشوة إذا نجحوا في فرض الرقابة المعاملة المستهدفة عن طريق التحقق من عدم لمس جذر الإخراج غير الصالح. وظيفة المطالبةBribe (بايت تخزين الذاكرة) خارجي { require(!claimed[block.number], "تم المطالبة بالرشوة بالفعل"); تيار الذاكرة OutputProposal = StorageOracle.getStorage(L2_ORACLE, block.number, SLOT, إثبات التخزين)؛ يتطلب (invalidOutputRoot == current.outputRoot، "فشل الهجوم")؛ ادعى[block.number] = صحيح؛ (تم إرسال المنطق،) = block.coinbase.call{value: bribeAmount}(""); 4https://etherscan.io/address/0xc662c410c0ecf747543f5ba90660f6abebd9c8c4يتطلب (أرسل، "فشل في إرسال الأثير")؛ } القائمة 1: مثال على عقد يحفز هجوم الرقابة على Bedrock. يجب أن يأخذ طول فترة النزاع أيضًا في الاعتبار حقيقة وجود دليل على الخطأ دليل تفاعلي وبالتالي يجب توفير الوقت الكافي للمشاركين للتفاعل وأن أي تفاعل يمكن أن يخضع للرقابة. إذا حدثت الخطوة الأخيرة في وقت قريب جدًا من وفي نهاية فترة النزاع، تكون تكلفة الرقابة أقل بكثير. على الرغم من أن الرقابة هي الإستراتيجية المهيمنة، فإن احتمالية النجاح أقل لأن عقد الرقابة معرضة للخطر هجمات رفض الخدمة: يمكن للمهاجم إنشاء معاملات معقدة للغاية تنتهي بـ نشر إثبات الخطأ دون أي تكلفة، حيث لن يتم دفع أي رسوم. وفي الحالات القصوى، تسمح فترة النزاع الطويلة بالتنسيق في حالة نجاحه هجوم الرقابة لتنظيم شوكة واستبعاد منتجي الكتلة المهاجمين. آخر يتمثل الهجوم المحتمل في نشر مقترحات لجذر الدولة أكثر مما يستطيع المتنازعون التحقق منه، والتي يمكن تجنبها باستخدام حد التردد. 4.1.1. انسحابات متفائلة سريعة نظرًا لأنه يمكن التحقق من صحة مجموعة التحديثات المتفائلة في أي وقت بواسطة أي عقدة كاملة، أ يمكن استخدام oracle الموثوق به لمعرفة ما إذا كان من الممكن إنهاء السحب بأمان على L1. هذا تم اقتراح الآلية لأول مرة بواسطة Maker [21]: يتحقق oracle من السحب، وينشر النتيجة على L1 حيث يتم تعيين قرض بفائدة للمستخدم، والذي يتم تلقائيًا يتم إغلاقه في نهاية 7 أيام، أي عندما يمكن الانتهاء من السحب فعليًا. هذا الحل يقدم افتراض الثقة، ولكن في حالة Maker يتم تصغيره نظرًا لأن عامل التشغيل oracle تتم إدارته من قبل نفس المنظمة التي تتحمل المخاطر من خلال تقديم القرض. 4.2. تكاليف المعاملات يتم تحديد تكلفة معاملات المستوى الثاني في الغالب من خلال التفاعل مع المستوى الأول. في كلا الحلين التكلفة الحسابية للمعاملات رخيصة جدًا حيث يتم تنفيذها بالكامل خارج السلسلة. Optimism ينشر بيانات استدعاء معاملات L2 كبيانات استدعاء ونادرًا (أو لا ينفذ أبدًا) الخطأ البراهين، وبالتالي فإن بيانات الاتصال هي المورد الأكثر تكلفة. في 12 يناير 2022 شبكة بيدروك تم إطلاقه على شبكة اختبار Goerli الخاصة بـ Ethereum. يمكن حساب معدل ضغط الغاز من خلال تتبع كمية الغاز المستخدمة في حجر الأساس في فترة معينة ومقارنتها مع كمية الغاز المستهلكة على L1 للكتل المقابلة. باستخدام هذه الطريقة ضغط الغاز تم العثور على معدل ∼20 : 1، ولكن هذا الرقم قد يختلف مع النشاط الحقيقي على الشبكة الرئيسية. StarkNet ينشر في Ethereum كل تغيير في حالة L2 كبيانات اتصال، وبالتالي فإن التخزين أغلى الموارد. نظرًا لأن الشبكة لا تستخدم EVM، فستكون تكلفة المعاملة لا يمكن تقدير الضغط بشكل تافه. من خلال افتراض تكلفة التنفيذ وبيانات الاتصال تكون ضئيلة، فمن الممكن لحساب نسبة ضغط الكتابة التخزين مقارنة L1. بافتراض عدم نشر أي عقد و10 خلايا لم يتم الوصول إليها مسبقًا على StarkNet تم تعديله، وتم العثور على معدل ضغط تكلفة كتابة التخزين يبلغ ∼ 24: 1. إذا تم الكتابة فوق الخلية 𝑛مرات بين عمليات نشر البيانات، ستكون تكلفة كل عملية كتابة 1/𝑛مقارنة بالتكلفة من كتابة واحدة، حيث يتم نشر آخر واحد فقط. يمكن تقليل التكلفة بشكل أكبر من خلالضغط القيم المستخدمة بشكل متكرر. وتنقسم تكلفة التحقق من صحة إثبات بين المعاملات التي يشير إليها: على سبيل المثال، StarkNet الكتلة 4779 تحتوي على 200 معاملة و إثبات الصلاحية يستهلك 267830 وحدة غاز، أو 1339.15 غاز لكل معاملة. 4.2.1. تحسين بيانات الاتصال: عقد ذاكرة التخزين المؤقت الموضح أدناه هو smart contract الذي يقوم بتنفيذ ذاكرة تخزين مؤقت للعناوين للاستخدام المتكرر العناوين من خلال الاستفادة من حقيقة أن التخزين والتنفيذ أقل تكلفة بكثير الموارد، إلى جانب عقد الأصدقاء الذي يوضح استخدامه. هذا الأخير يتتبع "أصدقاء" لعنوان يمكن تسجيله عن طريق استدعاء وظيفة addFriend. إذا كان عنوان تم استخدامه بالفعل مرة واحدة على الأقل، ويمكن إضافته عن طريق استدعاء addFriendWithCache الوظيفة: مؤشرات ذاكرة التخزين المؤقت هي أعداد صحيحة مكونة من 4 بايت بينما يتم تمثيل العناوين بـ 20 بايت، لذلك هناك توفير بنسبة 5:1 في وسيطة الوظيفة. يمكن استخدام نفس المنطق للبيانات الأخرى أنواع مثل الأعداد الصحيحة أو البايتات بشكل عام. العقد AddressCache { تعيين (عنوان => uint32) عنوان عام 2key؛ العنوان[] المفتاح العام2عنوان; وظيفة ذاكرة التخزين المؤقت (العنوان _address) العوائد الداخلية (uint32) { require(key2address.length < type(uint32).max, "AddressCache: ذاكرة التخزين المؤقت ممتلئة"); require(address2key[_address] == 0, "AddressCache: العنوان مخبأ بالفعل"); // يجب أن تبدأ المفاتيح من 1 لأن 0 يعني "لم يتم العثور عليها" مفتاح uint32 = uint32(key2address.length + 1); Address2key[_address] = key; key2address.push(_address); مفتاح العودة؛ } وظيفة ذاكرة التخزين المؤقت قراءة (uint32 _key) إرجاع العرض العام (العنوان) { require(_key <= key2address. length && _key > 0, "AddressCache: لم يتم العثور على المفتاح"); إرجاع عنوان المفتاح2[_key - 1]; } } القائمة 2: عنوان عقد التخزين المؤقت. أصدقاء العقد هو AddressCache { تعيين (العنوان => العنوان []) الأصدقاء العامين؛ وظيفة addFriend(address _friend) عامة { friends[msg.sender].push(_friend); ذاكرة التخزين المؤقت(_friend); } وظيفة addFriendWithCache(uint32 _friendKey) عامة { friends[msg.sender].push(cacheRead(_friendKey)); } وظيفة getFriends () إرجاع العرض العام (العنوان [] الذاكرة) { عودة الأصدقاء[msg.sender]؛} } القائمة 3: مثال على عقد يرث ذاكرة التخزين المؤقت للعنوان. يدعم العقد في ذاكرة التخزين المؤقت حوالي 4 مليارات (232) عنوانًا، ويعطي إضافة بايت واحد حوالي 1 تريليون (240). 4.2.2. تحسين التخزين: مرشحات بلوم يوجد في StarkNet العديد من الأساليب لتقليل استخدام مساحة التخزين. إذا لم يكن من الضروري أن ضمان توافر البيانات الأصلية، فيكفي حفظها على السلسلة hash: هذا هي الآلية المستخدمة لحفظ البيانات لـ ERC-721 (NFT) [22]، أي رابط IPFS الذي يحل المشكلة hash من البيانات إذا كانت متوفرة. بالنسبة للبيانات التي يتم تخزينها عدة مرات، فمن الممكن استخدام البحث جدول مشابه لنظام التخزين المؤقت المقدم لـ Optimism، والذي يتطلب حفظ جميع القيم فيه مرة واحدة على الأقل. بالنسبة لبعض التطبيقات، يمكن تجنب حفظ كافة القيم باستخدام مرشح بلوم [23، 24، 25]، أي بنية بيانات احتمالية تسمح للمرء أن يعرف على وجه اليقين ما إذا كان لا ينتمي العنصر إلى مجموعة ولكنه يعترف باحتمالية خطأ صغيرة ولكن لا يمكن إهمالها إيجابيات. تتم تهيئة مرشح Bloom كمصفوفة مكونة من 𝑚bits عند الصفر. لإضافة عنصر، استخدم الدالة 𝑘hash مع توزيع عشوائي موحد، يتم تعيين كل منها إلى جزء صغير من المصفوفة التي تم تعيينها إلى 1. للتحقق مما إذا كان العنصر ينتمي إلى المجموعة نقوم بتشغيل الوظائف 𝑘hash والتحقق أن قيمة 𝑘bits مضبوطة على 1. في مرشح بلوم البسيط، لا توجد طريقة للتمييز ما إذا كان ينتمي العنصر فعليًا إلى المجموعة أو يكون نتيجة إيجابية كاذبة، وهو احتمال ينمو كرقم من الإدخالات يزيد. بعد إدخال 𝑛العناصر: ف[إيجابية كاذبة] = (︃ 1 - [︂ 1 −1 𝑚 ]︂𝑘𝑛)︃𝑘 ≈ (︁ 1 −𝑒−𝑘𝑛/𝑚)︁𝑘 بافتراض استقلالية احتمالية كل مجموعة بت. إذا كان عدد 𝑛 من العناصر (ذات حجم عشوائي!) موجودًا من المتوقع أن يتم تضمينها، واحتمال وجود نتيجة إيجابية كاذبة مسموح بها هو 𝑝، وهو حجم المصفوفة يمكن حسابها على النحو التالي: 𝑚= −𝑛ln 𝑝 (في 2)2 بينما العدد الأمثل لوظائف hash هو: 𝑘= 𝑚 𝑛ln 2 إذا افترضنا إدراج 1000 عنصر بتفاوت 1% فإن حجم المصفوفة هو 9585 بت مع 𝑘= 6، بينما في حالة التسامح بنسبة 0.1% يصبح 14377 بت مع 𝑘= 9. إذا كان مليون عنصر ومن المتوقع إدراجها، يصبح حجم المصفوفة حوالي 1170 كيلو بايت لـ 1% و1775 كيلو بايت لـ 0.1%، بنفس قيم 𝑘، لأنها تعتمد فقط على 𝑝[26]. في لعبة لا يجب فيها تعيين اللاعبين إلى خصم سبق لهم تحديه، بدلاً من حفظ قائمة الخصوم السابقين في مساحة التخزين لكل لاعب، يمكن للمرء استخدام بلوم مرشح. غالبًا ما تكون مخاطرة عدم تحدي بعض اللاعبين مقبولة، ويمكن إعادة ضبط عامل التصفية بشكل دوري.4.3. Ethereum التوافق الميزة الرئيسية للتوافق مع EVM وEthereum هي إعادة استخدام كل ما هو متاح أدوات. Ethereum smart contracts يمكن نشرها على Optimism دون أي تعديل أو عمليات التدقيق الجديدة. تظل المحافظ متوافقة وأدوات التطوير والتحليل الثابت والتحليل العام الأدوات وأدوات الفهرسة وoracles. Ethereum و Solidity لها تاريخ طويل من الدراسة الجيدة الثغرات الأمنية، مثل هجمات إعادة الدخول، والتجاوزات والتجاوزات، والقروض السريعة، وoracle التلاعب. ولهذا السبب، تمكن Optimism من الحصول على قدر كبير من القيمة في وقت قصير الوقت. إن اختيار استخدام جهاز افتراضي مختلف يعني الحاجة إلى إعادة بناء النظام البيئي بأكمله، مع ميزة حرية تنفيذ أكبر. StarkNet ينفذ الحساب أصلاً التجريد، وهو آلية حيث يكون كل حساب smart contract يمكن تنفيذه المنطق التعسفي طالما أنه يتوافق مع واجهة (ومن هنا جاء مصطلح التجريد): وهذا يسمح استخدام أنظمة التوقيع الرقمي المختلفة، والقدرة على تغيير المفتاح الخاص باستخدام نفس العنوان، أو استخدم multisig. اقترح مجتمع Ethereum تقديم هذا آلية مع EIP-2938 في عام 2020، لكن الاقتراح ظل قديمًا لأكثر من عام تم إعطاء التحديثات الأخرى أولوية أكبر [27]. هناك فائدة أخرى مهمة يتم اكتسابها من التوافق وهي إعادة استخدام العملاء الحاليين: Optimism يستخدم نسخة من geth للعقدة الخاصة به مع اختلاف ∼ 800 سطر فقط، وهو ما كان تم تطويره واختباره وصيانته منذ عام 2014. إن وجود عميل قوي أمر بالغ الأهمية كما هو محدد ما هو مقبول على أنه صالح أم لا في الشبكة. خطأ في تنفيذ دليل على الخطأ قد يتسبب النظام في قبول دليل غير صحيح على أنه صحيح أو دليل صحيح على غير صالح ليتم قبول الكتلة على أنها غير صحيحة، مما يعرض النظام للخطر. احتمالية هذا النوع من يمكن أن يقتصر الهجوم على نطاق أوسع من العملاء: Optimism يمكن إعادة استخدامه بالإضافة إلى الحصول على عملاء Ethereum الآخرين الذين تمت صيانتهم بالفعل، ويتم تطوير عميل آخر قائم على Erigon جارية بالفعل. في عام 2016، تم استغلال مشكلة في إدارة الذاكرة في برنامج geth كان هجوم DoS وخط الدفاع الأول هو التوصية باستخدام التكافؤ، والثاني أكثر العميل المستخدم في ذلك الوقت 5. StarkNet يواجه نفس المشكلة مع إثباتات الصلاحية، لكن العملاء يجب كتابتها من الصفر، ونظام الإثبات أكثر تعقيدًا، وبالتالي بل هو أيضًا أكثر تعقيدًا لضمان الصحة.

比较

  1. 比较 4.1.提款时间 区分乐观汇总和有效性汇总的最重要方面是 提款初始化和结束之间经过的时间。在这两种情况下, 提款在 L2 上初始化并在 L1 上完成。在 StarkNet 上,最终确定是可能的: 一旦新状态根的有效性证明在 Ethereum 上被接受:理论上,它是 初始化后可以在 L1 第一个区块中提取资金。在实践中, 在 Ethereum 上发送有效性证明的频率是区块速度之间的权衡 最终确定和证明聚合。目前StarkNet提供有效性证明以供验证 每 10 小时 4,但计划随着交易活动的增加而减少。 在 Optimism Bedrock 上,只有在争议结束时才有可能最终确定提款 期限(当前为 7 天),之后根自动被视为有效。长度为 这个时期主要是由以下事实决定的:故障证明可以在 Ethereum 上进行审查,直到 它的结束。随着时间的增加,此类攻击的成功概率呈指数下降: E[减去值] = 𝑉𝑝𝑛 其中𝑛是一个区间内的区块数量,𝑉是可以减去的资金量 通过发布无效根,𝑝是成功执行审查的概率 在单个块中进行攻击。假设这个概率是 99%,即 Rollup 中锁定的值 是一百万个以太币,一个时间间隔内的区块是 1800 个(6 小时的区块,12 个区块) 秒间隔):预期值约为 0.01391 以太。该系统的安全性是通过 要求提案者抵押比预期值多得多的以太币。 温泽等人。展示了如何使用简单的 smart contract 进行审查攻击 确保状态中的某些内存区域不会更改 [20]。对攻击进行建模 作为马尔可夫博弈,本文表明审查是理性的占优策略 如果区块生产者获得的补偿多于包含更改的交易 记忆。上面讨论的𝑝值可以看作是有理块的百分比 网络中的生产者,其中“理性”没有考虑可能的惩罚 外部性,例如对 blockchain 的信任度降低,从而降低了其加密货币的价值。 以下代码呈现了可用于执行审查攻击的 smart contract 在基岩上。该攻击通过向区块生产者提供贿赂来利用他们的动机 审查会修改国家特定部分的交易。合同主要内容 ClaimBribe 函数允许区块生产者在成功审查后索取贿赂 通过检查是否未触及无效的输出根来确定目标交易。 函数 ClaimBribe(字节内存 storageProof) 外部 { require(!claimed[block.number], "已索取贿赂"); OutputProposal 内存当前 = storageOracle.getStorage(L2_ORACLE, block.number, SLOT, 存储证明); require(invalidOutputRoot == current.outputRoot, "攻击失败"); 声称[区块数] = true; (bool 发送, ) = block.coinbase.call{值: bribeAmount}(""); 4https://etherscan.io/address/0xc662c410c0ecf747543f5ba90660f6abebd9c8c4require(sent, "发送以太币失败"); } 清单 1:激励对 Bedrock 进行审查攻击的合约示例。 争议期限的长短还必须考虑到过错证明是 交互式证明,因此必须为参与者提供足够的时间进行交互 并且任何互动都可能受到审查。如果最后一次移动发生的时间非常接近 争议期结束后,审查成本明显减少。虽然审查是 占优策略,成功的可能性较低,因为审查节点容易受到 拒绝服务攻击:攻击者可以生成非常复杂的交易,并以 免费发布故障证明,因为无需支付任何费用。 在极端情况下,较长的争议期可以在成功解决问题后进行协调 审查攻击,组织分叉并排除攻击区块生产者。另一个 可能的攻击在于发布比争议者可以验证的更多的国家根提案, 可以使用频率限制来避免这种情况。 4.1.1.快速乐观提款 由于任何全节点都可以随时验证 Optimistic Rollup 的有效性,因此 受信任的 oracle 可用于在 L1 上了解提款是否可以安全完成。这个 机制最初由 Maker [21] 提出:oracle 验证提现,发布 L1 上的结果,在该结果上将计息贷款分配给用户,该结果自动 7 天后关闭,即提款可以实际完成时。这个解决方案 引入了信任假设,但在 Maker 的情况下,由于 oracle 运算符,它被最小化 由通过提供贷款承担风险的同一组织管理。 4.2.交易成本 L2 交易的成本主要由与 L1 的交互决定。在两种解决方案中 交易的计算成本非常便宜,因为它完全在链下执行。 Optimism 将 L2 事务 calldata 发布为 calldata 并且很少(或从不)执行错误 证明,因此 calldata 是最昂贵的资源。 2022 年 1 月 12 日,基岩网络 已在 Ethereum 的 Goerli 测试网上启动。可以计算气体压缩率 通过跟踪特定时期内基岩上使用的气体量并将其与 相应区块的 L1 上花费的 Gas 量。使用这种方法进行气体压缩 发现比率为 ∼20 : 1,但该数字可能与主网上的实际活动有所不同。 StarkNet 在 Ethereum 上发布 L2 状态的每个更改作为 calldata,因此存储是 最昂贵的资源。由于网络不使用EVM,交易成本 压缩不能简单地估计。通过假设执行成本和调用数据 可以忽略不计,可以计算出存储写入的压缩比 L1。假设没有部署合约,并且之前未在 StarkNet 上访问过的 10 个单元格 修改后,发现存储写入成本压缩率为~24:1。如果单元格被覆盖 数据发布之间的𝑛次,每次写入的成本将是成本的1/𝑛 一次写入,因为仅发布了最后一个写入。成本可以通过以下方式进一步最小化压缩常用值。有效性证明验证的成本分为 它所指的交易:例如,StarkNet区块4779包含200笔交易及其 有效性证明消耗 267830 个单位的 Gas,即每笔交易消耗 1339.15 个 Gas。 4.2.1.优化calldata:缓存合约 下面介绍的是 smart contract,它实现了经常使用的地址缓存 通过利用存储和执行成本便宜得多的事实来解决问题 资源,以及演示其用途的 Friends 合约。后者跟踪 可以通过调用 addFriend 函数注册的地址的“好友”。如果一个地址 已经至少使用过一次,可以通过调用addFriendWithCache来添加 功能:缓存索引是4字节整数,而地址是20字节表示, 因此函数参数节省了 5:1。相同的逻辑可以用于其他数据 类型,例如整数或更一般的字节。 合约地址缓存 { 映射(地址=> uint32)公共地址2key; 地址[]公钥2地址; 函数cacheWrite(地址_地址)内部返回(uint32){ require(key2address.length < type(uint32).max, "AddressCache: 缓存已满"); require(address2key[_address] == 0, "AddressCache: 地址已缓存"); // 键必须从 1 开始,因为 0 表示“未找到” uint32 key = uint32(key2address.length + 1); 地址2键[_地址] = 键; key2address.push(_address); 返回键; } 函数cacheRead(uint32 _key)公共视图返回(地址){ require(_key <= key2address.length && _key > 0, "AddressCache: 找不到密钥"); 返回 key2address[_key - 1]; } } 清单 2:地址缓存合约。 合约好友是AddressCache { 映射(地址=>地址[])公众好友; 函数 addFriend(地址_friend) 公共 { 朋友[msg.sender].push(_friend); 缓存写入(_friend); } 函数 addFriendWithCache(uint32 _friendKey) 公共 { 朋友[msg.sender].push(cacheRead(_friendKey)); } 函数 getFriends() 公共视图返回 (address[] memory) { 返回好友[msg.sender];} } 清单 3:继承地址缓存的合约示例。 该合约在缓存中支持大约 40 亿(232)个地址,并且添加一个字节给出 约 1 万亿 (240)。 4.2.2.优化存储:Bloom 过滤器 在 StarkNet 上有多种技术可以最大限度地减少存储使用。如果没有必要的话 保证原始数据的可用性,那么将其 hash 保存在链上就足够了:this 是用于保存 ERC-721 (NFT) [22] 数据的机制,即解析 数据的 hash(如果有)。对于多次存储的数据,可以使用查找 表类似于 Optimism 引入的缓存系统,要求将所有值保存在 至少一次。对于某些应用程序,可以通过使用布隆过滤器来避免保存所有值 [23,24,25],即一种概率数据结构,可以让人们确定地知道是否 一个元素不属于一个集合,但承认有很小但不可忽略的错误概率 积极的一面。 布隆过滤器被初始化为 𝑚 位为零的数组。要添加元素,𝑘hash 函数 使用均匀随机分布,每个映射到设置的数组的一位
  2. 要检查某个元素是否属于集合,我们运行 𝑘hash 函数并验证 𝑘位设置为 1。在简单的布卢姆过滤器中,无法区分是否是 元素实际上属于该集合或者是误报,概率随着数量而增长 条目数量增加。插入𝑛元素后: P[假阳性] = (︃ 1 − [︂ 1 −1 𝑚 ]︂𝑘𝑛)︃𝑘 ≈ (︁ 1 −𝑒−𝑘𝑛/𝑚)︁𝑘 假设每个位组的概率独立。如果 𝑛 元素(任意大小!)是 预期包含在内,并且容忍误报的概率是 𝑝,即数组的大小 可以计算为: 𝑚= −𝑛ln 𝑝 (ln 2)2 而 hash 函数的最佳数量是: 𝑘=𝑚 𝑛2 如果我们假设以 1% 的容差插入 1000 个元素,则数组的大小为 9585 位 𝑘= 6,而对于 0.1% 的容差,当 𝑘= 9 时,它变成 14377 位。如果一百万个元素 预计将被插入,数组的大小变为约 1170 kB(对于 1%)和 1775 kB(对于 1%) 0.1%,与 𝑘 的值相同,因为它仅取决于 𝑝[26]。 在游戏中,玩家不得被分配给他们已经挑战过的对手, 可以使用 Bloom 来保存过去对手的列表,而不是为每个玩家保存存储空间 过滤器。不挑战某些玩家的风险通常是可以接受的,并且可以重置过滤器 定期。4.3. Ethereum 兼容性 与 EVM 和 Ethereum 兼容的主要优点是重用所有可用的 工具。 Ethereum smart contracts 可以在 Optimism 上发布,无需任何修改,也不 新的审计。钱包保持兼容,开发和静态分析工具,一般分析 工具、索引工具和 oracles。 Ethereum 和 Solidity 有着悠久的深入研究历史 漏洞,例如重入攻击、溢出和下溢、闪贷和 oracle 操纵。正因为如此,Optimism 能够在短时间内获取大量价值 时间。 选择采用不同的虚拟机意味着必须重建整个生态系统, 具有更大的实施自由度的优点。 StarkNet 本机实现帐户 抽象,这是一种机制,每个帐户都是一个 smart contract ,可以实现 任意逻辑,只要它符合接口(因此称为抽象):这允许 使用不同的数字签名方案,使用更改私钥的能力 相同的地址,或使用多重签名。 Ethereum 社区提议引入此功能 2020 年与 EIP-2938 的机制,但该提案已经过时了一年多,因为 其他更新已被赋予更高优先级[27]。 兼容性带来的另一个重要好处是现有客户端的重用:Optimism 使用 geth 版本作为自己的节点,只有 ∼800 行差异,这已被 自 2014 年以来开发、测试和维护。拥有强大的客户至关重要,因为它定义了 网络中哪些内容被认为有效,哪些内容无效。故障证明实施中的一个错误 系统可能会导致错误的证明被接受为正确的,或者正确的证明被无效的 块被认为不正确,从而损害系统。出现这种类型的可能性 可以通过更广泛的客户端多样性来限制攻击:Optimism 除了 geth 之外还可以重用 已维护其他 Ethereum 客户端,并且正在开发另一个基于 Erigon 的客户端 已经在进行中。 2016年,geth的内存管理问题被利用 DoS攻击的第一道防线是推荐使用Parity,第二道最 当时使用的客户端 5. StarkNet 面临同样的有效性证明问题,但是客户端 必须从头开始编写,证明系统要复杂得多,因此 确保正确性也要复杂得多。

خاتمة

  1. الاستنتاج تعد المجموعات المجمعة هي الحل الواعد المتاح اليوم لحل مشكلة قابلية التوسع في اللامركزية blockchains، مما يمهد الطريق لعصر blockchains المعيارية بدلاً من متجانسة blockchains. يظهر بشكل أساسي اختيار تطوير مجموعة متفائلة أو مجموعة صلاحية كمفاضلة بين التعقيد وخفة الحركة. يتمتع StarkNet بالعديد من المزايا مثل السرعة عمليات السحب، وعدم القدرة الهيكلية على التحولات غير الصالحة للحالة، وانخفاض تكلفة المعاملات في حساب فترة تطوير أطول وعدم التوافق مع EVM، بينما Optimism لديه استفادت من اقتصاد الشبكة للحصول بسرعة على حصة كبيرة من السوق. Optimism ومع ذلك، يمتلك Bedrock تصميمًا معياريًا يسمح له بأن يصبح صالحًا 5https://blog.ethereum.org/2016/09/22/ethereum-network-currently-undergoing-dos-attack

مجموعة التحديثات في المستقبل: يستخدم Cannon حاليًا برنامج minigeth المترجم إلى MIPS لإثبات الأخطاء النظام، ولكن يمكن استخدام نفس البنية للحصول على دائرة وإنتاج إثباتات الصلاحية. يؤدي تجميع جهاز معقد مثل EVM للهندسة المعمارية الدقيقة إلى عملية أبسط الدائرة التي لا تحتاج إلى تعديل وإعادة التحقق منها في حالة الترقية. RISC صفر هو بنية دقيقة يمكن التحقق منها مع أدلة STARK قيد التطوير بالفعل بناءً على RISC-V ذلك يمكن استخدامه لهذا الغرض كبديل لـ MIPS [28]. أحد الجوانب التي لا ينبغي الاستهانة بها هو التعقيد في فهم كيفية تعمل التكنولوجيا. تتمثل قوة blockchains التقليدية في القدرة على التحقق من حالة blockchain دون الثقة في أي كيان خارجي. ومع ذلك، في حالة StarkNet، فهو كذلك من الضروري الثقة في التنفيذ عندما لا يكون من الممكن التحقق من المكونات المختلفة على أساس التشفير والرياضيات المتقدمة. قد يؤدي هذا في البداية إلى خلق احتكاك لـ اعتماد التكنولوجيا، ولكن مع تقدم الأدوات واستخدام البراهين النزاهة خارج الحقل blockchain نأمل أن يتم حل هذه المشكلة.

结论

  1. 结论 Rollups 是当今最有前途的解决方案,可解决可扩展性问题 去中心化的 blockchains,为模块化 blockchains 时代铺平了道路,而不是 整体 blockchains。 主要显示了开发 Optimistic Rollup 或 Validity Rollup 的选择 作为复杂性和敏捷性之间的权衡。 StarkNet 具有许多优点,例如速度快 提款、结构上无法进行无效的状态转换、较低的交易成本 开发周期较长且与 EVM 不兼容,而 Optimism 有 借助网络经济,迅速占领市场主要份额。 然而,Optimism Bedrock 拥有模块化设计,使其成为 Validity 5https://blog.ethereum.org/2016/09/22/ethereum-network-currently-undergoing-dos-attack

未来的 Rollup:Cannon 目前使用编译为 MIPS 的 minigeth 来防止故障 系统,但可以使用相同的架构来获得电路并产生有效性证明。 为微架构编译复杂的机器(例如 EVM)会产生更简单的结果 升级时无需修改和重新验证电路。 RISC 零是 可验证的微架构,具有 STARK 证明,已基于 RISC-V 开发 可用于此目的作为 MIPS [28] 的替代。 不应低估的一个方面是理解如何实现这一目标的复杂性。 技术有效。传统 blockchains 的优点是能够验证 blockchain 而不信任任何第三方实体。然而,对于 StarkNet 来说,它是 当无法验证各个组件时,有必要信任实现 基于密码学和高等数学。这最初可能会产生摩擦 技术的采用,但随着工具和完整性证明的使用的进步,甚至 在 blockchain 字段之外,这个问题有望得到解决。