木星链 木星链
Ctrl+D收藏木星链
首页 > 币赢 > 正文

Nitro:详析Optimism Bedrock和Arbitrum Nitro的设计差异

作者:

时间:1900/1/1 0:00:00

原文作者:OPLabs研发人员Norswap

原文编译:DeFi之道

这是一篇有关?OptimismBedrock?以及?ArbitrumNitro之间设计差异的分析文章。

这一切都源于我对?Nitro白皮书的阅读,以及我对Bedrock设计的感性认识。

这变得非常技术性,如果你想关注并感到困惑,我建议你参考一下Bedrock概述以及我关于?Cannon故障证明系统的演示文稿,当然还有Nitro白皮书。

准备好了之后,让我们开始吧!

首先,Nitro白皮书很棒,读起来令人愉快,我建议所有感兴趣的人都去看看。

说到这里,我的印象是Bedrock和Nitro大致使用了相同的架构,但有一些较小的差异。

白皮书大体上证实了这一点。尽管如此,还是有很多的不同之处,包括一些我没想到的。这就是这篇文章要讲的东西。

固定与可变区块时间

最有趣和最重要的事情之一是,Nitro将像当前版本的Optimism一样工作,每笔交易一个区块,并且区块之间的时间可变。

我们放弃了这一点,因为它背离了以太坊的工作方式,也是开发人员的痛点。而Bedrock将有“真正”的区块,并且固定时间为2秒。

不规则的区块时间使很多常见的合约变得不稳定,因为它们是使用区块而不是时间戳来表示时间。这尤其包括源自Sushiswap的分配LP奖励的Masterchef合约。

我不确定为什么这些合约用区块而不是时间戳来表示时间!以太坊矿工在操纵时间戳方面有一些回旋余地,但默认情况下,客户端不会构建距离wallclock太远的区块,所以没有问题。

无论如何,在Optimism上,这导致StargateFinance奖励比其他链提前几个月用完,因为他们没有考虑到这种特殊性!

0x316地址在过去3天内总共使用25万美元买入17.72万枚LBR:金色财经报道,据Spot On Chain监测显示,0x316地址在2小时前以平均1.514美元的价格买入9.907万LBR(15万美元),随后价格上涨 4%。该地址在过去3天内总共使用25万美元买入17.72万枚LBR。每次买入后,LBR的价格都会飙升,该地址目前仍持有全部,现值26.7万美元。

此外,地址0x316也从两个流行的meme coin赚取了总计约28.9万美元:从7月24日到7月28日,将9500万枚RSR (18.8万美元) 兑换为 2.53亿枚RLB (现价值46.1万美元),从8月10日起,将7.5万枚USDT兑换为74万枚BITCOIN(现价值9.1万美元)。[2023/8/12 16:22:04]

“每笔交易一个区块”模型还有其他的问题。首先,存储链的开销很大。其次,这意味着状态根需要在每次交易后更新。

更新状态根是一项非常昂贵的操作,其成本要在多笔tx中进行分摊。

(B)Geth作为库或作为执行引擎

Nitro使用Geth“作为一个库”,通过钩子对其进行了最低限度的修改,以调用适当的功能。

在Bedrock中,一个经过最少修改的Geth作为“执行引擎”独立运行,它从rollup节点接收指令,就像执行层从Eth2中的共识层接收指令一样。我们甚至使用完全相同的API!

这有一些重要的影响。首先,我们能够使用除Geth之外的其他客户端,在它们之上应用类似的最小差异。这不仅仅是理论,我们已经准备好了?Erigon。

其次,这让我们可以重用整个Geth堆栈,包括在网络层,这可以实现对等发现和状态同步等功能,而无需进行任何额外的开发工作。

(B)状态存储

Nitro将一些状态保存在一个特殊帐户中,使用特殊的内存布局将密钥映射到存储槽。

摩根士丹利:比特币遵循金价四年翻涨周期,投机相似度惊人:金色财经报道,摩根士丹利分析师Sheena Shah在报告中表示,比特币目前的走势追随着1970年代的黄金行情。她表示,两者的投机驱动相似度惊人,比特币似乎也遵循金价4年周期翻涨的历史。但她也同时强调,如果比特币继续走上黄金的道路,可能会在未来经历一段艰难时期。

Sheena指出,从1971年开始,随着美元货币供应量的快速增长,黄金价格在四年内翻涨了2倍。然而,这还不是投机的最高点。从1976年8月到1980年1月,金价从102美元飙升8倍,达到850美元。由于金价在最初几年仍在管理中,相似之处有可能是统计上的巧合,但在我们看来,更有可能的是两者都由相似的投机周期驱动的。[2023/4/20 14:16:02]

从这个意义上说,Bedrock并没有太多的状态,它只有很少的状态存储在普通EVM合约中。

在确定/执行下一个L2块时,一个Bedrock副本会查看:

L2链头部的区块头;

从L1读取的数据;

L2链上EVM合约中的一些数据,目前只有L1费用参数;

在Bedrock中,节点可能会崩溃并立即优雅地重启。它们不需要维护额外的数据库,因为所有必要的信息都可以在L1和L2区块中找到。我认为Nitro的工作原理是一样的。

但很明显,Nitro比Bedrock做了更多的记账工作。

(C)L1到L2的消息包含延迟

Nitro会延迟10分钟处理L1到L2的消息。在Bedrock上,通常应具有几个区块的小确认深度。

我们也有一个称为“排序器漂移”的参数,它允许L2区块的时间戳在其L1原点之前漂移。

我们仍然需要确定最终的数值,但我们也倾向于10分钟,这意味着最坏的情况是10分钟。然而,此参数旨在确保在与L1的连接暂时丢失期间L2链的活性。

Paradigm工程副总裁Tal Broda已离职:金色财经报道,Paradigm 工程副总裁 Tal Broda 已离职,其表示虽然我坚信 Paradigm 的使命和公司实现其愿景的能力,但在 Paradigm 领导工程的工作并不适合我。

Tal Broda 此前于 2022 年 4 月加入 Paradigm。[2023/3/21 13:17:52]

然而,通常在确认深度后会立即包含存款。

Nitro的白皮书中提到,这10分钟的延迟是为了避免L1上的存款因重组而消失。这让我对白皮书没有谈到的一个方面感到好奇,那就是:L2链如何处理L1的重组。我认为答案是它没有处理。

这并非不合理:合并后,L1的最终性延迟大约是12分钟。因此,如果存款延迟10/12分钟是可接受的,那么这个设计就是可行的。

因为Bedrock更接近L1,我们需要在需要时通过重组L2来处理L1重组。确认深度应避免这种情况过于频繁地发生。

另一个小的区别是,如果Nitro排序器在10分钟后不包含存款,你可以通过L1合约调用“强制包含”它。

在Bedrock上,这不是必需的:拥有一个L2区块而不包括其L1起源的存款是无效的。

并且由于L2只能比原点提前10分钟,因此10分钟后不纳入存款的一条链是无效的,它将被验证器拒绝,并受到故障证明机制的挑战。

(D)L1-to-L2消息重试机制

Nitro为L1到L2的消息实施了“可重试票证”机制。假设你正在跨链,tx的L1部分可以工作,但L2部分可能会失败。因此,你需要能够重试L2部分,否则你已经丢失了代币。

Nitro在节点的ArbOS部分实现了这一点。在Bedrock中,这一切都是在Solidity本身中完成的。

如果你使用我们的L1跨域messenger合约向L2发送tx,该tx会到达我们的L2跨域messenger,后者将记录其哈希值,使其可重试。Nitro的工作方式相同,只是在节点中实现。

彭博社:年初至今14只表现最好的ETF都与加密货币相关:金色财经报道,彭博社汇编的数据显示,2023 年年初至今,以数字资产为重点的基金主导着 6.8 万亿美元的 ETF 市场,在彭博追踪的约 2,000 只股票 ETF 中(不包括杠杆产品)排名前 14 位。虽然现在还处于早期阶段,但与去年形成了鲜明对比,当时加密相关基金是表现最差的基金之一。

数据显示, Valkyrie 比特币矿工 ETF(代码:WGMI)今年迄今已飙升 67%,VanEck 数字资产矿业 ETF(代码:DAM)上涨约 56%,VanEck Digital Transformation ETF (代码:DAPP)、Global X Blockchain ETF (代码:BKCH) 和Bitwise Crypto Industry Innovators ETF (代码:BITQ) 涨幅也达到两位数,这些ETF是年初至今表现最佳的五只交易所交易基金。[2023/1/14 11:11:14]

我们还通过我们的L1OptimismPortal合约,公开了一种较低level的存款方式。

这并没有为你提供L2跨域messenger重试机制的安全网,但另一方面,这意味着你可以在Solidity中实现自己的应用程序特定重试机制。这很酷!

(E)L2费用算法

在Bedrock以及Nitro这两个系统上,费用都有L2部分以及L1部分。对于L2费用,Nitro使用了一个定制系统,而Bedrock重复使用了EIP-1559。Nitro必须这样做,因为他们有上述提到的1tx/区块系统。

我们仍然需要调整EIP-1559参数,以使其在2秒的出块时间内正常工作。今天,Optimism只收取低且固定的L2费用,我认为我们可能也会出现价格飙升,但在实践中从未发生过。

重用EIP-1559的一个优点是,它应该使钱包和其他工具计算费用稍微容易一些。

Kraken CEO:默克尔树储备金证明没有包含负债总额,毫无意义:11月26日消息,Kraken首席执行官Jesse Powell发推表示,完整的准备金证明审计必须包括客户负债总额、用户可验证的密码证明(表明每个账户都包含在总额中)以及证明保管人对钱包的控制权的签名,“默克尔树储备金证明没有包含负债总额,就毫无意义“。

此前报道,币安宣布上线资产储备证明系统,并且采用默克尔树数据结构,将保持用户资产透明的工作推向一个新的进程。该系统上线之初将提供用户BTC资产证明,未来几周将逐步支持更多资产和网络。[2022/11/26 20:48:29]

而Nitro的gas计量公式非常优雅,他们似乎已经对此进行了大量思考。

(F)L1费用算法

那L1费用如何呢?这里的区别会更大一些。Bedrock使用向后查看的L1基础费用数据。这些数据非常新鲜,因为它通过与存款相同的机制传递。

由于仍然存在L1费用飙升的风险,所以我们收取预期费用的一个小倍数。

有趣的事实:这个倍数是所有当前排序器收入的来源!使用EIP-4844后,这将缩小,收入将来自MEV提取。

Nitro做的事情要复杂得多。我并没有声称了解它的所有复杂性,但基本要点是他们有一个控制系统,可以从L1实际支付的费用中获得反馈。

这意味着使用此数据将交易从L1发送回L2。如果排序器支付不足,它可以开始向用户收取更少的费用。如果它多付了钱,它可以开始向用户收取更多费用。

顺便说一句,你可能想知道为什么我们需要将费用数据从L1传输到L2。这是因为我们希望费用计划成为协议的一部分,并接受故障证明的挑战。否则,流氓排序器可通过设置任意高的费用来拒绝链!

最后,交易批次在两个系统中都被压缩。Nitro根据对交易压缩程度的估计收取L1费用。Bedrock目前没这样做,但我们有这样做的计划。

原因在于,不这样做,会加剧在L2存储中缓存数据的不正当动机,从而导致有问题的状态增长。

(G)故障证明指令集

故障/欺诈证明!Nitro的工作方式与Cannon的工作方式有相当多的差异。

Bedrock编译为MIPS指令集架构(ISA),Nitro编译为WASM。由于编译为他们称为WAVM的WASM子集,他们似乎对输出进行了更多的转换。

例如,他们通过库调用替换浮点(FP)操作。我怀疑他们不想在链上解释器中实现粗糙的FP操作。我们也这样做,但Go编译器会替我们处理!

另一个例子:与大多数只有跳转的ISA不同,WASM具有适当的控制流。从WASM到WAVM的转换消除了这一点以返回跳转,这可能也是为了解释器的简单性。

他们还将Go、C和Rust混合编译为WAVM,而我们只编译Go。显然WAVM允许“语言的内存管理不受干扰”,我将其解释为每个WAVM模块都有自己的堆。

我很好奇是:他们是如何处理并发和垃圾收集的。我们能够在minigeth中相当容易地避免并发,所以这部分可能很简单。

然而,我们对MIPS所做的唯一转换之一是修补垃圾收集调用。这是因为垃圾收集在Go中使用了并发,而并发和故障证明不能很好地结合在一起。Nitro也是做了同样的事吗?

(H)二分博弈结构

Bedrock故障证明将用于验证发布到L1的状态根的有效性的minigeth运行。此类状态根不经常发布,并且包括许多区块/批次的验证。

Cannon中的二分游戏是在这个运行的执行轨迹上进行的。

另一方面,在Nitro中,状态根与发布到L1的每组批次(RBlock)一起发布。

Nitro中的二分游戏分为两部分。首先找到挑战者和防御者不同意的第一个状态根。然后,在验证器运行中找到他们不同意的第一个WAVM指令。

权衡之处是在Nitro执行期间进行更多的哈希运算部分),但在故障证明期间进行更少的哈希运算:在执行跟踪的二分游戏中的每个步骤,都需要提交内存Merkle根。

像这样的故障证明结构也减少了对验证器内存膨胀的担忧,其可能会超过当前运行MIPS的4G内存限制。

这不是一个很难解决的问题,但我们需要在Bedrock中小心,而验证单笔交易可能永远不会接近这个限制。

原像预言机

用于故障证明的验证器软件需要从L1和L2读取数据。因为它最终将在L1上“运行”,所以需要通过L1访问L2本身-通过发布到L1的状态根和区块哈希。

你如何从状态或链中读取?

Merkle根节点是其子节点的哈希,因此如果你可以请求原像,则可以遍历整个状态树。同样,你可以通过请求区块头的原像来向后遍历整个链。

在链上执行时,这些原像可以预先提供给WAVM/MIPS解释器。

这就是你在Nitro和Bedrock上阅读L2的方式。

但是,你需要为L1做类似的事情。因为交易批次存储在L1调用数据中,无法从L1智能合约访问。

Nitro将其批次的哈希存储在L1合约中。所以他们至少需要这样做,我不知道为什么没有提到。

在Bedrock中,我们甚至不存储批次哈希。相反,我们使用L1区块头返回L1链,然后沿着交易Merkle根向下查找calldata中的批次。

第4.1节的结尾,提醒我们?Arbitrum发明了“哈希预言机技巧”。不安全不应该成为忘记Arbitrum团队贡献的理由!

(J)大原像

Nitro白皮书还告诉我们,L2原像(Preimage)的固定上限是110kb,但没有引用L1的数字。

在Cannon中,我们有一个称为“大原像问题”的问题,因为要反转的潜在原像之一是收据原像,其中包含Solidity事件发出的所有数据。

在收据中,所有日志数据连接在一起。这意味着攻击者可以发出大量日志,并创建一个非常大的原像。

我们需要读取日志,因为我们使用它们来存储存款。这并不是绝对必要的:Nitro通过存储消息的哈希来避免这个问题。

我们不存储哈希,因为计算和存储它的成本很高,存储要消耗大约20kgas,每计算32个字节要消耗6gas。平均一笔交易大约是500字节,因此一批200笔交易的哈希成本大约为20kgas。以2000美元的ETH和40gweibasefee计算,额外的哈希和存储成本为3.2$。以5000美元的ETH和100gwei计算,成本即20美元。

我们目前解决大原像问题的计划,是使用简单的zk-proof来证明原像中某些字节的值。

(K)批次和状态根

Nitro将批次和状态根紧密相连。他们在包含状态根的RBlock中发布一组批次。

另一方面,Bedrock将其批次与状态根分开发布。关键优势是再次降低了发布批次的成本。这让我们可以更频繁地发布批次,并减少状态根的频率。

另一个影响是,使用Nitro,如果RBlock受到挑战,它包含的交易将不会在新链上重放。

在Bedrock中,我们目前正在讨论在成功挑战状态根的情况下该怎么做:在新的状态根上重放旧tx,还是完全回滚?

(L)其他杂项

影响较小的差异:

(i)Nitro允许排序器发布的单笔交易可以是“垃圾”。为了尽量减少对Geth的更改,我们总是丢弃包含任何垃圾交易的批次。

排序器总是能够提前找到那些,所以挥之不去的垃圾交易要么是不当行为要么是bug。排序器运行与故障证明相同的代码,因此它们对无效内容的定义应该相同。

(ii)Nitro引入了预编译合约,尤其是用于L2到L1的消息传递。我们目前不使用任何预编译,而是更喜欢它们“预部署”,即存在于创世区块特殊地址的实际EVM合约。

事实证明,我们可以在EVM中做我们需要的事情,这使得节点逻辑稍微简单一些。不过,我们并不坚决反对预编译,也许我们会在某个时候需要用到预编译。

(iii)Nitro故障证明使用了d向剖析。概念验证Cannon实现使用了二分法,但我们也可能会转向d向剖析。

Nitro白皮书中有一个非常好的公式,它解释了基于固定成本和可变成本的d的最优值。然而,我希望他们在实践中包括了如何估算这些成本的具体例子!

原文链接

标签:NitroTROROCKBEDNitro Networkg9tro Crowdfunding PlatformROCKS价格BEDOGE币

币赢热门资讯
区块链:波卡中的商业:汽车行业如何利用区块链打破现状寻求创新

Polkadot生态研究院出品,必属精品背景在全球疫情蔓延、金融市场动荡以及极端气候频现的持续威胁下,各行各业乃至全球经济都面临着严峻的考验.

1900/1/1 0:00:00
DCO:Dcoin(大币网) 暂停BSC链充提公告

亲爱的大币网用户:因BSC链临时维护,本平台已暂停BSC链的充提,如您于此期间入金,将于系统恢复后陆续到帐.

1900/1/1 0:00:00
ING:冷风说币:振幅继续收窄,交易低迷?2022.10.10

市场消息近日“欧佩克+”决定,从11月起将原油总产量日均下调200万桶,未来预计原油价格会涨到100美元/桶.

1900/1/1 0:00:00
GATE:Gate.io将上线Street Runner(SRG)

Gate.io将于2022年10月18日22:00(UTC8)上线StreetRunner(SRG)交易.

1900/1/1 0:00:00
以太坊:以太坊价格正在考虑可能的下行趋势 – 近期会如何变化?

?以太坊合并后的景象让许多人感到意外。数字和结果不是他们的想法。糟糕的宏观经济条件和其他负面因素使预期的突破黯然失色.

1900/1/1 0:00:00
比特币:为何我如此看好比特币?

比特币是否被过度投机??Q:相较于投机用途,比特币的支付应用少之又少,过度投机是否扼杀了比特币?TimDraper:不,投机是过程的一部分,所有新兴产业都会经历繁荣与萧条.

1900/1/1 0:00:00