BIT:万字详谈Rollup排序器的去中心化道路

原文作者:JonCharbonneau

原文编译:0x11,ForesightNews

Kelvin认为「ZKRollup」?不是真正的ZKRollup,我认为所有「Rollup」都不是真正的Rollup,至少现在还不是。那么问题是,我们如何使它们成为真正的Rollup?

当前的Rollup大多是需要信任和许可的:?

来源:L2Beat?https://l?2b?eat.com/scaling/risk

我将概述以下方面的情况:?

强制交易包含机制:即使Rollup运营商正在审查用户,用户也应该能够强制包含他们的交易以抵抗审查。

L2定序器去中心化和共识:单排序器、PoA、PoS领导者选择、PoS共识、MEV拍卖、基于Rollup、效率证明等。?

SharedSequencer&X-ChainAtomicity:这是真正有趣的全新东西。

MEV-Aware设计:我将简要介绍FCFS的一些变体。关于加密内存池,可以参考我最近的文章。??

本文不讨论提高Rollup安全性的许多其他要求,包括降低升级密钥的能力,实施稳健且无需许可的证明等。

Rollup如何工作?

智能合约Rollup(SCR)

首先,简要回顾一下SCR的工作原理。今天在以太坊上使用的Rollup都是SCR。在更高层次上,SCR基本上只是:?

输入的有序数组?

在它们上面运行的代码

基于输入的确定性输出

跨链桥:

交易包提交应该需要某种类型的保证金来防止恶意行为。如果提交了欺诈交易包,保证金将被烧毁并分配一些给欺证明的挑战者。

SCR具有「合并共识」——一种可在链上验证的共识协议。Rollup共识可以完全在L1智能合约中运行。它不影响主链共识机制,也不需要主链共识机制的任何支持。?

去中心化共识协议通常包含四个主要特征:

区块有效性函数——状态转换函数。区块有效性在链下执行,通过有效性证明或欺诈证明来证明。

分叉选择规则——如何在两个原本有效的链之间进行选择。Rollups旨在通过构造实现分叉自由,因此并不严格要求分叉选择规则。?

领导者选择算法——允许谁将新区块添加到区块链。?

抗女巫攻击——PoW、PoS等?

鉴于1和2还存在争议,去中心化排序器的最低要求就是某种形式的抗女巫攻击领导者选举。FuelLabs一直在做这方面的工作,他们认为PoS:?

不应该应用于具备完整共识协议的Rollup

应该只用于Rollup中的领导者选择?

为什么你应该有一个L2本地共识,这一点也有很好的论据,稍后会详细介绍。?

主权Rollup

主权Rollup仍然将交易数据发布到L1以获得数据可用性和共识,但他们在Rollup中处理客户端的「结算」。DA层告诉你数据存在,但它们没有定义Rollup的规范链:

SCR-「规范」Rollup链由L1智能合约决定。

SR-没有决定「规范」Rollup链的L1智能合约。规范的Rollup链可以由Rollup节点自己决定。??

Celestia

相关说明:有一个有趣的论点,即不存在全球规范链。这里有一个反驳的观点,其他关于Rollup在主权和可组合性之前权衡的Twitter线程。我鼓励你筛选这些信息,以及了解最近关于比特币主权Rollup的话题。?

上面的「规范」框架很容易理解,而且它不是本文的重点,我继续使用它。有关一般Rollup架构的更多背景信息,可以参考此处。

去中心化排序器

用户发起的强制交易包含

智能合约Rollup

如上所述,定序器一般负责批量处理交易并将其发布到L1智能合约。不过,用户也可以自己直接向合约中插入一些交易:

当然这是低效和昂贵的,因此排序器将打包交易并将它们一起提交。这分摊了许多交易的固定成本,并允许更好的数据压缩:?

定序器承诺最终会在L1上发布这些交易,同时我们可以计算输出以获得软确认:

当排序器将这些事务发布到L1时,会进一步巩固输出:

通常情况下,用户在从L1将资金桥接到L2时只会自己包含交易。这作为L1合约的输入,告诉L2它可以在L2上铸造由L1上锁定资产支持的资产。?

如果我想把我的钱还给L1,我可以在L2上销毁它,然后告诉L1把我的钱还给我。L1不知道L2发生了什么,因此需要提交证明以及解锁我在L1上资金的请求。

因为我是L2过来的,所以排序器可以发起这个取款请求,提交给L1。但是,现在你信任L2排序器的抗审查性。你不再拥有与在L1相同的保证,也许他们不喜欢你,或者排序器关闭,你的资产永远停留在L2上。?

Rollup可以通过各种措施在本地增加自己的抗审查。这可能包括拥有一个具有高质押价值的L2共识集、包含列表的一些变体、添加阈值加密等,以最大限度减少L2用户审查的机会。这些都是不错的做法,但理想情况下,我们还希望L2用户拥有与L1相同的抗审查保证。?

如果用户受到审查,他们需要一些方法来强制退出Rollup或强制将他们的交易纳入L2。这就是为什么L2用户应该保留诸如强制将他们的L2交易直接包含到L1合约中的能力。例如,被审查的用户可能能够自己直接向L1提交一个单操作交易包。???

资料来源:StarknetEscapeHatchResearch

如果L2用户的唯一选择是将交易直接强制发送到L1,这并不理想。对于许多低价值用户来说,这并不友好,尤其是在与L1交互成本越来越高的情况下。更高级的设计可能能够解决这个限制,强制在Rollup之间进行原子交易。KalmanLajkó在这里进行了一项引人入胜的设计,我强烈推荐阅读。它希望在具有共享证明者和DA层的系统中启用交叉Rollup强制交易。

主权Rollup

主权Rollup的强制包含机制工作方式不同,如前所述,它们执行分叉选择规则的方式与SCR不同。?

在SCR中,L1智能合约执行Rollup的分叉选择规则。除了验证ZK证明之外,它还检查该证明是否建立在之前的证明之上,以及它是否处理了在L1上发送的所有相关强制交易。?

SR可以将其ZK证明发布到L1DA层,供所有人查看为calldata/blob。然后,你只需添加一条规则,即新证明只有在先前有效证明的基础上才有效。这个规则可以在客户端强制执行,但它会要求用户扫描链的历史。

calldata可以绑定回L1区块头,并且可以添加一条声明说「我已经扫描了DA层的证明,并且这个证明建立在最近的有效证明之上」。这直接在证明中证明了分叉选择规则,而不是在客户端强制执行。?

由于你已经在扫描证明,因此你还可以证明你已经扫描了任何强制交易。任何人都可以在需要时将强制交易直接发布到L1DA层。

交易终局性的层级和ZK快速终局性

以太坊上的链上证明验证通常非常昂贵,因此目前的ZKR往往每隔几个小时才将STARK发布到以太坊。相对于交易数量,证明的增长往往非常缓慢,因此这种批处理可以显着节省成本。然而,这么长的最终确定时间带来的用户体验并不理想。

如果Rollup只在链上发布状态差异,那么即使是完整的节点也无法在没有证明的情况下确保最终确定性。如果Rollup的完整交易数据发布在链上,那么至少任何完整节点都可以与L1一起完成。

通常,轻节点只会依赖中心化排序器实现软确认。然而,ZKR可以在p2p层中快速生成和分发ZK证明,供所有轻客户端实时查看,同时以L1速度为它们提供最终性。稍后,这些证明可以递归地打包发布到L1。?

这就是SovereignLabs计划做的事情,类似地,Scroll计划在链上发布中间ZK证明,因此轻客户端可以相当快地同步。通过这两种方式,Rollup可以开始以L1的速度完成终局性,而不是等待以节省Gas成本。请注意,在这两种情况下,你只是将最终确定时间降低到绝对最小值。??

任何排序器都不会比L1更快实现最终确定性。不同的排序器设计可以做的最好的结果是为你提供比L1更快的预确认,并具有不同级别的确定性。

PatrickMcCorry最近还对Rollup交易最终确定性等级进行了很好的概述。

根据谁向你提交,交易「最终性」有不同的级别

不同的参与者在给定时间对「真相」的认知程度不同

单排序器

当前大多数Rollup都有一个排序器用于提交交易包。它提高了效率,但也带来了较弱的实时活性和抗审查性。加上适当的保护措施后,这对于许多用例来说可能是可以接受的:

抗审查:如上所述,用户强制包含交易的机制。?

活性:如果主排序器出现故障,则可以使用某种热备份选项。如果备用排序器也出现故障,任何人都应该能够介入。?

例如,备用排序器可以由Rollup治理机制选出,用户可以获得安全性、抗审查性和活性。即使从长远来看,单个主动排序器也是一个可行的选择。

Base可能是一个新趋势的开始。公司现在可以管理和优化他们的产品,就像他们对企业区块链的胡说八道感到兴奋一样,但它现在实际上可以成为一个无需许可、安全和可互操作的链。

Base最终打算将他们的排序器集去中心化,但重点是他们并不严格需要这样做。要明确的是,这需要Rollup来实施必要的步骤,来确保它实际上是安全的,并维护抗审查性。

这将是对中心化/托管产品的巨大改进,而不是对最大去中心化产品的替代。Rollup只是扩展了设计空间。这也是大多数Rollup团队没有将排序器去中心化作为首要任务的主要原因——其他项目更看重用户安全、抗审查和减少对Rollup运营商的信任。?

然而,如果用户/其他方需要介入以保持活性和「实时抗审查」,这仍然不是理想的选择。根据强制交易包含机制,低价值用户介入可能成本高昂或不切实际。对实时抗审查和活性的最大保证有高度偏好的Rollup将寻求去中心化。运营单个受许可的排序器时也可能存在监管考虑。

权威证明

对单个排序器的一个直接改进是允许少数地理分布式排序器。排序器可以简单地轮换,他们之间建立联系将有助于激励诚实的行为。?

这个概念应该不会太陌生——多重签名桥通常有少数受信任的公司,或者类似的委员会,比如Arbitrum的AnyTrustDA。但重要的是,他们在这里的权力要小得多。总的来说,与单排序器相比,这种方案的抗审查和活性更好,但仍然不完美。

排序器拍卖又名MEV拍卖(MEVA)

Rollup也可以通过智能合约直接运行MEV拍卖(MEVA),而不是根据质押分配排序器权利。任何人都可以竞标交易的排序权,拍卖合约将排序权授予出价最高的人。这可以针对每个区块进行,也可以持续一段较长的时间。获胜的排序器仍应提交一笔保证金,以保证如果他们随后出现故障或作恶,可以实施处罚。

资料来源:ZKRollup的去中心化

在实践中,如果拍卖没有直接纳入协议,协议外的MEVA是最自然的结果。如果根据质押权重确定排序权,就会出现某种形式的MEV-Boost/PBS式拍卖系统,类似于我们今天在L1以太坊上看到的。这种情况下,费用/MEV可能会分配给质押者。如果拍卖被纳入协议,那么费用/MEV可能会进入某种形式的RollupDAO金库。

领导选举的无许可PoS

无需许可即可作为排序器加入,但你必须质押代币。质押机制可以通过智能合约或直接在Rollup中建立在基础层上。你可以使用此PoS结合某种形式的链上随机性的方式来进行领导者选择,这与任何L1大致相同。你对一个区块进行排序的概率=你占总质押量的比例。可以通过削减等来对错误/恶意的排序器施加惩罚。

请注意,由于上述原因,这不需要排序器达成共识。Rollup使用L1达成共识,因此不需要本地共识。质押决定哪些排序器可以提议区块,但是他们不需要对其他排序器提议的区块进行投票。?

也可以授予任意时间长度的排序权。你可能有权对100个连续的Rollup块或1000个等进行排序。更长的周期可能更高效,并且在给定时间内只需要一个排序器。然而,授予扩大的垄断权可能有其他外部性。

Dymension

Dymension是一个实践这些思路的项目。DymensionHub将是Cosmos中典型的诚实多数PoSL1。它的L2将使用它进行结算和共识,同时依赖Celestia进行DA。?

根据他们的?Litepaper,去中心化RollApp排序将需要在DymensionHub上抵押DYM。然后,领导者的选择取决于抵押的DYM的相对数量。这些排序器将从各自的Rollup中获得收入,然后将相关的成本支付给DymensionHub和Celestia。?

这种机制的结果是,这个堆栈中几乎所有的价值捕获都直接累积到DYM代币中。使用自己的原生代币进行排序的Rollup为他们自己的代币附加了价值。这个设置启发了一个问题:以太坊Rollup是否只能使用ETH进行排序器选举?

在我看来,这大大降低了在此类结算层上部署L2的动机。大多数L2团队自然希望他们自己的代币能够产生有意义的价值。

用于领导人选举和L2共识的无许可PoS

如果需要,也可以使用L2质押进行排序器选举和本地共识。这正是StarkNet计划的代币模型:?

PoS排序器领导者选举:如上所述,需要某种形式的领导者选举。

PoS共识:激励L2验证者在L1最终确定之前达成临时L2共识,提供更强的预确认。这不是一个严格的要求,但却是一个有吸引力的选择。

此外,STRK可以以某种形式用于:

DA的PoS共识:激励提供需要单独共识的alt-DA。

证明:激励证明者生产STARK。

交易流程如下:

排序:排序器对交易进行排序并提交一个区块

L2共识:StarkNet共识协议签署提议的区块

证明生产:证明者为共识同意的区块生成证明

L1状态更新:将证明提交给L1以进行状态更新

有关StarkNet计划的更多详细信息,你可以参考以这一篇贴文。?

L2共识,还是只是L1共识??

L2可能会也可能不会实现自己的本地共识。例如,L1智能合约可以根据其规则了解到:

用于领导者选举和共识的PoS:「我只能接受由L2共识签署的区块。」

用于领导者选举的PoS:「这是被选中的排序器,此时允许提交区块。」?

Rollup如果没有本地共识,你需要做的是:

使Rollup区块提议无需许可。

创建一些标准来选择为给定高度构建的最佳区块

让节点或结算合约执行分叉选择规则

从L1继承共识和最终性

请注意,在任何一种情况下,L2的价值都可以累积到Rollup代币中。即使L2代币仅用于某种形式的领导者选择,排序权的价值仍会累积到L2代币上。

L2共识的缺点

现在让我们讨论在L1之前拥有/不拥有本地共识的权衡。?

FuelLabs团队提出的一个论点认为L2共识会降低抗审查性。「这允许大多数验证者审查新区块,这意味着可以冻结用户资金。不需要PoS来保护Rollup,因为Rollup是由以太坊保护的。」这是一个争议地带。如前所述,即使审查排序器依然可以提供抗审查性。?

另一种说法是,完全达成共识是「低效的」。例如,下面前一种情况似乎更容易:

一个时间段内,一个主排序器运行所有东西。

一个时间段内,一个主排序器运行所有东西,然后所有其他节点需要投票并同意。

当然,不同的排序器设计和共识机制存在很大差异。

此外,请注意,如此处和此处所述,一些人对在排序器去中心化中使用PoS表示担忧。L1与L2的复杂性可能使处理某些类型的攻击更具挑战性。

L2共识的优势

排序器的最大目标可能是在L1的完全安全和保障之前为用户提供更快的软确认。查看StarkNet的机制:

「强大而快速的L2终局性——StarkNet状态只有在交易包被证明为L1之后才成为最终状态。因此,L2去中心化协议应该在下一交易包被证明之前就执行顺序做出有意义的承诺。」

由多排序器的经济安全支持的共识有助于在此期间提供更有力的保证:

「Starknet共识必须是负责任的,因为违反安全和活性的行为会受到惩罚,任何部分参与者都会受到惩罚。」

Rollup还可以灵活地在共识机制选项的范围内尝试不同的权衡点,因为它们最终总是可以回退到以太坊L1的安全性和动态可用性。?

在L1排序的Rollups

上面的Rollup都构建了特定的排序器,以某种形式创建Rollup区块。例如,PoS无需许可即可加入,但在给定slot,只有选出的L2排序器能够提交区块。也有一些相关方案不依赖任何L2排序器,它们通过L1本身来进行交易排序。??

完全无政府状态

Vitalik早在2021年就提出了这种「完全无政府状态」的想法。任何人都可以随时提交交易包。它满足了上面讨论的去中心化排序器的两个最低要求:

抗女巫攻击:由L1提供抗女巫攻击。?

领导者选择:领导者选择是事后的。

这已经足够了,因为L1已经提供了安全性。如果L2区块已发布到L1,则它们只有在无效或建立在无效区块上时才会被孤立。如果它们有效并发布到L1,则它们具有与L1本身相同的安全性。

Vitalik指出了一个重要的问题:效率低下。多个参与者很可能并行提交交易包,但只有一个可以被成功包含。这会浪费大量精力来生成证明和/或在发布交易包到链上时浪费Gas。

BasedRollup

但是,PBS现在可以使这种无政府状态的设计变得可行。它允许更多有规律的排序,每个L1区块最多有一个Rollup区块,并且没有浪费Gas。L1区块构建者可以只包含最高价值的Rollup区块,并根据搜索者输入的出价构建区块,类似于任何L1区块。Z在默认情况下许可ZK证明可能是合理的,这样做可以避免浪费计算。

这是JustinDrake最近提出的「BasedRollups」提案背后的核心思想。他使用该术语来指代由L1排序交易的Rollup。L1提议者只需确保在自己的L1区块中包含Rollup区块。这个简单的方案可以立即拥有L1的活性和去中心化。它们回避了棘手的问题,例如在L2排序器审查的情况下解决强制交易包含问题。此外,它们还消除了一些Gas开销,因为不需要排序器签名验证。?

一个有趣的问题是关于这些L2交易在哪里进行处理。L2客户端需要将这些交易发送到某个地方,以便L1搜索者/构建者接收它们并创建区块和数据块。它们可能会被送到:

L1Mempool-它们可以与一些特殊的元数据一起发送,「知情」的搜索者/构建者来解释。但是,这可能会增加L1内存池的负载。

L2的p2pMempools-这条思路似乎更站得住脚。搜索者/构建者除了通常的渠道外,还将开始检查和解释这些内容。?

这里的一个明显缺点是BasedRollup限制了排序器的灵活性。例如:

减少MEV:Rollups可以通过FCFS的变体、加密的内存池等变得有创意。?

预确认:L2用户喜欢快速的交易「确认」。BasedRollup交易「确认」时间最多回落到与L1持平,或者等待更长时间才能发布完整交易包。?

有趣的是,这正是早期Rollup团队正在做的事情:

Justin指出,重新质押可能会有所帮助。

这些都是围绕EigenLayer的研究领域,至少在他们的白皮书中提到过。目前尚不清楚这种方案能否实际解决问题。为了重新质押以有效改善这些缺点,可能希望所有质押者都选择运行它。通过让想要执行此操作的质押者进入一个单独的共享排序层来模拟这个想法似乎更合乎逻辑。?

效率证明(PoE)

去年,PolygonHermez提出了一项名为PoE的提案。这是专门用于L1排序的ZKRollup的另一种变体。这里的排序器是一个完全开放的角色,任何人都可以提交交易包。PoE有两个参与方,过程分为两步:

排序器

排序器收集L2用户交易并通过发送L1交易创建交易包。排序器将根据收到的经济价值提交区块,或为用户实现更好的服务。

排序器将支付L1Gas费以发布交易包,并且协议定义了必须用MATIC支付的额外费用。一旦发布,获胜的交易包立即定义链的新顶端,任何节点都可以确定性地计算当前状态。然后需要有效性证明来最终确定轻客户端的状态。?

聚合器?

这里的聚合器是ZK证明者。同样,这是一个任何人都可以参与的无需许可的角色。很简单:

带有交易数据的排序交易包在L1上按它们在L1上出现的位置排序。

PoE智能合约接受更新有效状态的第一个有效性证明,包括一个或多个尚未被证明的提议交易包。

聚合器可以进行成本效益分析,以找出发布证明的正确频率。如果他们赢了,他们将获得一部分费用,但等待更长时间以发布新证明会将他们的固定验证成本分摊到更多交易中。如果聚合器延迟发布证明,那么合约将执行还原操作。证明者浪费了计算资源,但他们会节省大部分的Gas。??

费用按如下方式分配:

来自L2交易的费用将由创建有效性证明的聚合器处理和分配。

所有的交易费用都会被发送到每个交易包对应的排序器。

排序器创建交易包的质押费用将被发送到聚合器,聚合器将此交易包包含在有效性证明中。

纯分叉选择规则

Rollkit?SR具有相似的「纯分叉选择规则」概念,如此处所述,指的是没有特权排序器的Rollup。节点遵从DA层进行排序,并应用「先到先得」的分叉选择规则。

L1排序的经济学

这些L1排序设计具有重要的经济影响,因为L2交易的MEV现在将在L1区块生产者级别捕获。在「传统的」L2排序模型中,L2交易的MEV由L2排序器/共识参与者/拍卖机制捕获。在这种情况下,尚不清楚有多少MEV会泄漏到L1。

这是好事还是坏事,难以说清:

好事:有些人喜欢「?L1经济联盟」。?

坏事:其他人担心基础层的激励。

这类方案可能是有意义的,特别是作为一种更简单的Rollup引导方法,但很难看到大多数Rollup将如此多的MEV放弃给L1。Rollups的一大好处确实是经济收益——一旦DA开始扩展并且成本下降,他们将只需要向L1支付很少的费用。较慢的出块时间和简单的MEV方法的缺陷对用户来说似乎也不是最佳选择。

激励ZK证明

请注意,上述PoE的竞争可能围绕最快的聚合器进行。ZK证明者市场有两个经济问题需要解决:

如何激励证明者创建证明

如何使证明提交无需许可,使其成为一个竞争激烈且稳健的市场

让我们考虑ZK证明者市场的两个简单模型:

富有竞争的市场

一个无需许可的市场中,证明者都争先恐后地为Rollup排序器/共识产生的区块创建证明。第一个创建证明的人可以获得为证明者指定的任何奖励。该模型可以高效地找到最适合该工作的证明者。

这看起来非常类似于PoW挖掘。然而,这里有一个独特的区别:证明是确定性计算。结果是,与其他证明者相比具有小但一致优势的证明者几乎总能获胜。那么这个市场就很容易出现中心化。?

在PoW挖矿中,随机性方面有更好的结果——如果我有1%的挖矿算力,我应该得到1%的奖励。

这种竞争性证明模型在计算冗余方面也是次优的——许多证明者将竞争并花费资源来创建证明,但只有一个人会获胜。

基于回合制的证明

证明者之间可以采取轮换的方式创建证明。这种方式可能更加去中心化,但在证明延迟方面效率较低。但是,它可以防止在只有一个证明者能够创建证明时浪费计算资源。?

此外,如果证明人的回合内未能提供证明,网络就会遇到问题。如果这些回合很长并且证明者宕机,协议将很难恢复。如果转换证明者的时间很短,其他证明者则可以介入。?

也可以允许任何人发布证明,但只有指定的证明者才能在给定时间内获得奖励。因此,如果当前证明者失败了,另一个证明者可以发布证明,但他们无法获得奖励。这是一种无私行为,花费资源进行计算而没有任何回报。

Scroll正在探索更多基于回合制的方法,将执行分配给随机选择的「rollers」:

Scroll工作流程

还有很多有趣的问题,比如在排序时用户层面的证明应该如何收费。可以在此处找到关于这些主题的更多讨论:

Scroll的YeZhang在《去中心化ZKRollup》一文中讨论了这种基于抵押排序MEVA的回合制网络的可能性?

《Scroll架构概述》提供了roller模型的更多详细信息

StarknetDecentralizedProtocolIV-ProofsintheProtocol

StarknetDecentralizedProtocolVI-TheBufferProblem

共享排序

大多数早期的解决方案都假定每个Rollup都需要自己弄清楚如何去中心化他们的排序器。正如我们在L1排序方案中看到的那样,但事实并非如此。许多Rollup可以选择一个共享排序器(SS)。这样做的好处是:

省力:无需再担心序器的去中心化问题,无需招募和管理验证者。这是一种非常「模块化」的方法——将交易排序剥离。SS从字面上看是一家SaaS公司。

结合安全和去中心化:让一个排序层建立强大的经济安全和实时CR,而不是为每个单独的Rollup创建多个小型委员会。

快速交易:其他单个Rollup排序器也可以做到这一点,但请注意,你仍然可以在这里获得那些超快的预确认。??

跨链原子性——在链A和链B上同时执行交易。。?

如前所述,简单地使用原生L1作为L2的排序器从根本上有几个缺点:?

仍然受限于L1的数据和交易排序吞吐量

失去为L2用户提供低于L1区块时间的快速交易的能力

L1排序可以做的最好的事情是消除L1的计算瓶颈并实现通信复杂性的改进。

那么,我们能否设计专门且更高效的SS,而不是让L1来做……

Metro-Astria的共享排序器

Metro是SS层的一个方案。你可以参考EvanForbes的研究帖子、ModularInsightstalk?和SharedSecuritySummittalk了解更多详情。由JoshBowen领导的Astria团队正在致力于实现Metro方案。

执行与排序分离

当前的Rollup节点实际上处理三件事:

这里的关键是执行和排序的分离。而共享排序可以做到:

为许多选择将其作为排序层的链排序交易

不执行这些交易和生成结果状态

排序是无状态的。SS节点不再需要存储所有不同Rollup的完整状态,他们删除了执行计算,传统排序器面临的巨大瓶颈在这里消失了。?

当从共识中剥离执行时,效率会变得非常高。如果节点所要做的只是生成有序的交易块并就该块达成一致而不执行所有事情,那么它们的效率会非常高。执行和证明可以在事后由不同的各方完成。

兼具排序器安全和去中心化

SS节点可以保持相对轻量级,甚至可以水平扩展。排序层比传统排序器更加去中心化,传统的排序器需要掌握链的复杂状态并负责执行。?

此外,通过跨多个链汇集资源,无需在多个Rollup中分割PoS共识,而是将它们全部聚合在一个地方。与许多实现自己的排序器集的Rollup相比,这种方案可能会产生更去中心化的排序器集,且不需要大量的质押资产。这很重要,因为:?

排序:为Rollup用户提供实时抗审查和活性的第一道线。?

执行和证明:可以在没有强烈的去中心化需求的情况下在事后完成。

一旦同意交易排序,执行可以在事后推迟到一个完全不同的链:

软共识和排序:共享排序器为用户提供快速预确认

共识&数据可用性:交易数据已在DA层最终确定,供所有人查看

惰性执行和证明:任何人都可以在事后执行和证明交易

后续的执行层不需要去中心化,因为这不是CR的来源。单排序器不是CR的理想选择,但这并不是因为它们作为执行者的角色,而是因为他们排序并包括交易。在这里,SS已经提供了有序的交易输入,因此也就是CR。之后对状态承诺的计算和比较就不需要去中心化了。?

软执行

用户喜欢快速的软执行:?

这需要某种形式的共识来提供出色的用户体验:

如果你只是依赖像Celestia这样的基础层的共识,就不能提供这些围绕排序和包容性的软性承诺。如果SS有一个具质押了高价值资产的去中心化委员会,它可以在快速区块上提供相当强大的承诺。??

因此,只要SS创建一个区块,用户就可以得到软确认。这种确认的强度取决于SS的构建。一旦数据实际发布到基础层,你就可以将这些交易视为真正的最终交易。然后可以生成并提交状态根和相关证明的最终计算。?

LazyRollup

「LazyRollup」非常简单。他们等到交易全部被排序并发布到DA层,然后他们下载这些交易,可选地应用分叉选择规则来选择交易的子集,执行交易处理,并确定交易状态。然后可以生成区块头。?

请注意,由于SS无法以需要访问完整状态的方式生成区块,因此它们不会检查无效的状态转换。因此,使用SS的「LazyRollup」状态机必须能够处理无效交易。当节点执行有序交易以计算结果状态时,节点可以简单地删除无效/恢复交易。立即执行的传统Rollup没有此限制。?

在将交易包含在链上之前需要状态访问才能处理交易的Rollup在这里行不通。例如,如果Rollup有一个区块有效性规则,区块包含的所有交易都是不会失败的有效交易。如果Rollup需要交易锻而不是状态访问,那么可以专门为这种类型的Rollup创建一个特殊的SS。

支付Gas

为了让SS运行,必须有某种机制让用户为他们的交易付费。你可以简单地使用大多数Rollup交易类型中已经包含的现有签名和地址来支付SS层上的Gas。或者,付款可能涉及SS上的一些包装交易,任何人都可以为包含的任意数据付费。这是一个开放的设计空间。?

分叉选择规则

Rollup能够继承他们正在使用的SS的分叉选择规则。然后,Rollup的全节点实际上是SS的轻客户端,检查一些提交以指示哪个Rollup区块在指定高度是正确的。?

但是,继承SS的分叉选择规则是可选的——你可以简单地要求Rollup处理它发布到基础层的所有事务数据。它会有效地继承基础层的CR和活性,但是你会牺牲很多用户喜欢的SS特性。

MEV

假设一个Rollup想要继承其SS的分叉选择规则并获得快速的软执行,SS自然会在MEV方面处于非常核心的位置。它决定Rollup的交易包含和排序。?

然而,Rollup不一定必须执行SS提供的交易,或者按照提供的顺序执行交易。你可以在技术上允许自己的Rollup进行第二轮处理,以在执行后重新排序SS发布的交易。但是,如上所述,这会失去使用SS的大部分优点。?

即使在这种情况下,SS层也可能仍然存在MEV,因为它有权包含交易。如果你真的想要,你甚至可以允许你的Rollup在第二轮处理中排除某些交易,但这会变得混乱,减少CR,并且失去大部分SS的好处。?

换出共享排序器

区块链中难以分叉的是任何形式的有价值的共享状态。看看ETH与ETC或类似的ETH与ETHPOW,社会共识决定了「真正的以太坊」是什么。我们都同意的「真实」状态是有价值的。

然而,SS实际上只是一个服务提供者——它们没有与之关联的有价值的状态。使用给定SS的Rollup保留了分叉它的能力,以支持一些其他排序机制,只需要一个小的硬分叉。

更具挑战性的是网络效应。如果许多Rollups都开始使用SS并且它们获得了巨大的网络效应,那么分离可能会很痛苦,除非其他Rollups也愿意迁移。

Espresso排序器(ESQ):由EigenLayer保障

EigenLayer?白皮书提到去中心化SS是重新质押的潜在用例之一。这个SS可以由ETH重新质押保护,它将处理许多不同L2的交易排序。?

WellEspresso刚刚在他们的共享排序器计划中公布了这一点。它可以利用EigenLayer重新质押来确保其共识。为了提供一个漂亮的可视化效果,今天Rollup是这个样子的:

这就是他们使用Espresso等SS时的样子:

Espresso排序器(ESQ)总体上与Metro的思路非常相似。它们按照相同的核心原则工作——将交易执行从排序中剥离出来。除此之外,ESQ还将为交易提供数据可用性。

HotShot共识和EspressoDA

作为背景,以太坊目前使用Gasper达成共识。这里相关的TLDR是Gasper即使在大多数节点可能掉线的条件下也能保持活跃。它有效地运行两个协议,共同维护一个带有最终前缀的动态可用链。Gasper在快速确定性上进行权衡。

总体而言,ESQ包括:

HotShot:ESQ建立在HotShot共识协议之上,与Gasper不同,该协议将快速最终性优先于动态可用性。它还可以扩展以支持更多验证器,就像以太坊所做的那样。?

EspressoDA:ESQ还将为选择加入的链提供DA。该机制还用于扩大他们的普遍共识。

排序器合约:作为轻客户端验证HotShot共识并记录检查点的智能合约。此外,它还管理ESQ的HotShotPoS共识的质押者。

网络层:在参与HotShot的节点和EspressoDA之间实现交易和共识消息的通信

RollupRESTAPI-L2Rollup用于与Espresso排序器集成的API。

再仔细看看DA。在乐观情况下,高带宽节点将使数据对所有其他节点可用,并且每个单独区块的可用性也由随机选出的小型委员会提供支持。鉴于小型委员会面临DDoS和贿赂攻击的风险,只要有足够比例的节点不妥协,可验证信息传播(VID)就可以提供可靠的备份路径来保证DA。

这个系统是为扩展性而构建的,因此ESQ希望为L2提供更便宜的DA。他们仍然会将他们的证明和状态更新结算到L1以太坊,但请注意,这将使默认情况下使用ESQ的链不再是完整的「Rollups」(以太坊L1不保证他们的DA)。它比数据可用性委员会(DAC)的简单实现更强大,但它的保证比真正的Rollup更弱。

交易流程

排序器合约:HotShot直接与其L1排序器合约交互。它验证了HotShot共识,并为其他参与者提供了一个界面来查看已排序的区块。该合约存储了区块提交的附加日志,不是完整的区块,任何人都可以根据提交的信息验证区块。

L2合约:每个使用ESQ的L2仍然有自己的以太坊L1Rollup合约。为了验证发送到每个Rollup的状态更新,每个Rollup合约必须能够访问导致声明的状态更新的经过认证的区块序列。它们与排序器合约交互以查询这些。?

转发给SS的交易将被排序,然后在L1上最终确定之前发回Rollup的执行者和证明者。SS还将提交给区块信息连同用于验证该块的仲裁证书一起发送到其L1排序器合约。这允许L1Rollup合约将Rollup状态更新证明与被证明为共识输出的区块提交的信息进行比较。?

交易流程的完整视图:

跨链原子性

正如Espresso帖子中所述,SS可以提供一些关于跨链原子性的令人兴奋的用例:

跨多个Rollup共享的排序层有望使跨链消息传递和桥接更便宜、更快、更安全。消除为另一个链的排序器构建轻客户端的需要,节约了成本。通过消除给定Rollup与其他Rollup的共识保持实时独立的需求,交叉Rollup桥接也可以进一步节省成本。共享排序器还为桥接提供了安全优势:共享排序器可以保证当且仅当事务在另一个Rollup中完成时,它才能在一个Rollup中完成。?此外,共享排序器增强了用户表达跨不同Rollup的事务之间的原子依赖性的能力。按照惯例,Alice将独立于Bob的Rollup-B交易t'签署和发布她的Rollup-A交易t'。在这种情况下,Alice的交易可能会在Bob的交易之前很久就被排序,从而给Bob留下一个长期的选择来中止。这种可选性不平衡通过共享排序器得到缓解,Alice和Bob可以将两个交易作为一个签名包一起提交。

这对跨链MEV产生了影响,因为链上活动最终会增长。典型的例子是「原子套利」。同一种资产在两个不同的链上以两种不同的价格进行交易。搜索者希望在没有风险的情况下同时执行两笔交易来实现套利。例如:

Trade1(T?1)-在Rollup1(R?1)上以低价购买ETH

Trade2(T?2)-在Rollup2(R?2)上以高价卖出ETH

对于原子套利,要么两笔交易都被成交,要么都没有成交。如果两个Rollup都选择了同一个SS,那么它可以为搜索者实现这种原子套利。这里的SS可以保证:

T?1包含在R?1的指令流中,当且仅当:?

T?2也包含在到R?2的指令流中

假设Rollup虚拟机按顺序执行各自流中的所有事务,那么我们还可以保证:

T?1在R?1上执行,当且仅当:

T?2也在R?2上执行

但是,这仍然不是你在共享状态机上进行交易时的保证。如前所述,SS不持有这些Rollup的状态,它们不执行交易。你不能完全保证其中一项交易不会在执行时恢复。

直接在这个基础上构建更高级的原语是有问题的。例如,如果你尝试在此SS之上构建一个即时销毁和铸造的跨链桥接,它会在完全相同的区块高度同时执行以下操作:

销毁R?1上的输入

在R?2上生成输出

你可能会遇到以下情况:?

R?1上的销毁可能会抛出意外错误,但?

R?2上的输出不会因任何原因而失效,因此它会完全执行。?

这将是一个大问题。

在某些情况下,只要这两个事务都包含在输入流中并被执行,你就可以确定这两个事务的预期结果,但通常情况并非如此。?

保证:T?1和T?2将包含在它们各自的流中,并且都将执行。

不保证:成功执行交易和由此产生的期望状态。?

这些「保证」可能足以满足原子套利之类的需求,其中搜索者已经拥有在每条链上执行这些交易所需的资产,但这显然不是共享状态机的同步可组合性。对于像跨链闪电贷这样的东西,它本身并不能提供足够的保证。?

与其他跨链消息传递协议结合使用时,可能仍然有用。让我们看看与交叉Rollup消息传递协议一起使用时如何促进NFT跨链原子交换:

T?1在R1上将ETH从U?1转移到SC?1

T?2在R?2上将NFT从U?2转移到SC?2

SC?1当且仅当它收到来自SC?2的确认NFT已存入的消息时,才允许U?2提取ETH

SC?2当且仅当它收到来自SC?1的确认ETH已存入的消息时,才允许U?1提取NFT

两个智能合约都实现了一个时间锁,这样如果任何一方失败,双方都可以收回他们的资产

此处的SS允许两个用户在步骤1中以原子方式提交。然后,你使用某种形式的跨链消息传递来验证彼此的结果状态并解锁资产以执行交换。?

如果没有SS以原子方式进行,两方可以就价格达成一致。但随后U?1可以提交交易,然后U?2可以等待并决定是否要中止交易。有了SS,他们就会被锁定在交易中。

这几乎是SS跨链原子性用例的边缘。总结:?

此处提供的保证的精确强度和实用性仍未得到证实

这对于跨链原子套利可能非常有用,同样可能对其他应用程序有用,例如跨链交换和NFT交易

提供额外的加密经济担保来承保某些类型的跨链交易可能会有所帮助

但是,你永远无法无条件地保证交易结果

关于跨链原子性的其他有趣主题,我建议查看:

Optimism'sSuperchain?-探索了SS在OP链中的使用。

Anoma-?HeterogeneousPaxos?和?Typhon?是非常不同的方法。

前面提到的Kalman的?CrossRollupForcedTransactions。

共享排序器总结

总而言之,SS的基本思想是:

显然这幅图并不科学,一切都是高度主观的,并且非常依赖于确切的构造。TLDR如下:

中心化排序器-如果你完全控制系统,通常很容易实现你想要的任何功能。然而,预确认能力有次优的保证,强制退出可能是不可取的,活性是次优的等。

去中心化的L2排序器:具有分布式质押排序器的Rollup相对于只有单个排序器的Rollup更具稳健性。但是,不同设计方案在诸如延迟之类的事情上需要进行权衡。?

在L1排序:最大程度保证去中心化、抗审查和活性等。但是,它缺乏快速预确认、数据吞吐量限制等功能。

共享排序器:拥有去中心化排序器的功能,不需要引导你自己的排序器集。然而,与L1排序相比,这种方案在L1最终确定之前的过渡时期有较弱的保证。此外,共享层可以将许多Rollup的委员会、经济安全等聚合到一个地方。

一旦L1最终确定,所有Rollup都会达到100%L1安全性。在获得L1结算的完全安全和保障之前,大多数排序器设计只是试图提供好用功能,但削弱了在过渡期间的保证。

SUAVE

去中心化构建器与共享排序器

当我们谈论这些试图处理许多其他链的交易的共享层时,差异可能会让人非常困惑。特别是当SUAVE?通常被称为「排序层」或者其他术语时,例如「用于Rollup的去中心化区块构建器」。需要明确的是,SUAVE与上述SS设计有很大不同。?

让我们观察一下SUAVE如何与以太坊交互。SUAVE不会以任何方式被嵌入以太坊协议。用户只需将他们的交易发送到其加密内存池中。SUAVE执行者的网络然后会为以太坊输出一个区块。这些区块将与传统的集中心化以太坊构建者的区块竞争。以太坊提议者在它们之间做出选择。

同样,SUAVE不会取代Rollup选择区块的机制。例如,Rollup可以实现一个PoS共识集,其运作方式与以太坊L1的运作方式大致相同。然后,这些排序器/验证器可以选择SUAVE为它们生成的区块。?

这与上面描述的SS非常不同,在SS中,Rollup可以完全消除去中心化排序器的需要。他们通过选择Metro或ESQ等来外包排序功能,并且他们可以选择继承SS的分叉选择规则。Ethereum、Arbitrum、Optimism等不会因为选择SUAVE交易排序而改变分叉选择规则。?

SUAVE不关心你的链的分叉选择规则是什么或者你的区块是如何选择的。它可以为任何链提供最有利可图的排序。请注意,与前面描述的SS节点不同,SUAVE执行程序通常拥有完全状态。他们需要模拟不同交易的结果以创建最佳排序。?

为了解差异,让我们考虑一个用户想要运行原子跨链套利的示例。提交给SUAVE与提交给SS,他们可以获得的保证有何区别:

SUAVE共享排序器

现在考虑一下,SUAVE如何与Rollup排序交互?甚至可能与SS交互?Espresso似乎确实相信?SUAVE与ESQ兼容。ESQ旨在与私有内存池服务兼容,例如可以充当构建器的SUAVE。它看起来类似于我们在以太坊上使用的PBS,现在:

共享提议者=共享排序器

共享构建者=SUAVE

与PBS一样,构建者可以获得提议者的盲目提交,以提议给定的区块。提议者只知道从提议区块中获得的总效用,而不知道内容。

综上所述,我们再回过头来看一个想做跨链套利的搜索者。SUAVE本身可以构建并发送到两个不同的Rollup:

Block1(B?1)其中包括Trade1(T?1)-在Rollup1(R?1)上以低价购买ETH

Block2(B?2)包括交易2(T?2)-在Rollup2(R?2)上以高价出售ETH

但很有可能B?1赢得了拍卖而B?2输了。如果将这两个Rollup选择到同一个SS中会发生什么。?

SS节点不知道交易实际上在做什么,所以它们需要有人为它们构建一个完整的区块,如果它们想要高效的话。好吧,SUAVE执行者可以将B?1和B?2都提交给SS,条件是两个区块都被填充或杀死。?

现在你可以在整个过程中获得非常好的经济保证:

SUAVE=共享构建者=可以向你保证,如果B?1和B?2都包含并以原子方式执行,会发生什么状态。

SS=共享提议者=可以向你保证B?1和B?2都包含在内并以原子方式执行。

?重新质押Rollup

我最近在Flashbots论坛上发了一篇关于SUAVE的潜在经济安全模型的帖子。简而言之,我讨论了为什么从长远来看,Rollup对于SUAVE来说可能是比重新质押更好的选择。

Hasu也对重新质押和Rollup之间的权衡做出了一些非常深思熟虑的回应。以下是他回应的概要:

Rollup通过L1保证安全性/抗审查/活性,但SUAVE并没有像大多数链那样从中受益,因为SUAVE链不适合普通用户。事实上,Flashbots正在研究如何主动限制用户将资金桥接到SUAVE的需求。理想情况下,链只需要搜索者/构建者在那里保留足够的运营资金。这可能比为用户存储大量资金而构建的传统Rollup的要求要低得多。此外,与普通用户相比,在这条链的上下文中,通过L1强制状态转换对于搜索者/构建者来说可能没有那么有价值。

DA很昂贵,至少今天是这样。我们将看到EIP-4844的影响,以及随后对DA需求可能的增长。我会注意到,对于代币持有者来说,重新质押可能更「昂贵」。一种对用户来说更贵,而另一种对代币持有者来说更贵。

SUAVE需要将状态转换从其他域报告回主链。关于Rollup从以太坊L1和其他Rollup读取状态的能力,它们具有很好的信任最小化属性。

这里有一个新想法:两者都做怎么样?这就是重新质押Rollup。??

这样并没有解决Hasu提到的所有问题,但它仍然是一个非常有趣的新选择,尤其是从长远来看。?

Rollup可以使用这些EigenLayer重新质押者来实现本地共识,而不仅是提供安全,但是链随后汇总到以太坊。

如前所述,Rollup可以决定实施他们自己的本地共识,以便在真正的L1最终确定之前为短期预确认和重组阻力提供更有力的保证。好吧,为什么我们不让Rollup共识集成为一组以太坊重新质押者呢?现在你有两个选择:?

在L1之前实现确定性:高价值、去中心化的重新质押共识提供了强大的短期重组阻力。

在L1之后实现确定性:仍然是Rollup!它将其数据发布到以太坊,并且可以发布ZK/欺诈证明。?

一旦L1完成确定性,任何Rollup都具有相同的安全性。这只是实现自己共识的Rollup的一种变体。与其像前面描述的那样在Rollup上设置自己的验证器并由自己的原生代币提供保护,这种方案选择让以太坊重新质押者运行共识。

同样,如果Celestia采用某种形式的重新质押,那将会很有趣。我之前曾写过,对于Celestia来说,嵌入Rollup将是一个有趣的方向,而本地重新质押将是另一个令人着迷的工具,允许自由市场决定他们想要加入哪些功能。重新质押还可以帮助Celestia的安全预算,因为alt-DA层的价值累积模型仍未得到证实。?

其他MEV因素

最简单的想法是使用简单的FCFS运行单个排序器,排序器按照它们收到的顺序提交事务。你可以合理地相信单排序器遵守FCFS排序,但它仍然会加剧潜在竞争和相关的负外部性,以及其他问题。因此,即使是中心化排序器也需要更有效地应对MEV。

上面的一些解决方案隐含地处理了MEV的部分问题,但显然没有Rollups想说他们的用户被夹在中间。所以,我们可能需要发挥创意,结合拍卖的好处和可编程的隐私。

这就是为什么中心化排序器今天喜欢拥有私有内存池——试图确保用户不会被抢跑等。但这并不容易去中心化。如果你向许多排序器开放,你是否相信他们运行自己的私有内存池?即使你这样做了,如果每个人都有自己的私人内存池并且你需要开始轮换领导者,那也可能产生新的问题。

加密内存池是解决其中许多问题的一个引人入胜的研究领域。我刚刚发布了一篇文章介绍它。在这篇文章中,我简要概述了FCFS提案的一些变体。

时间提升

意识到简单FCFS的局限性和负外部性,Arbitrum已经开始探索它的新变体。最近,他们提出了时间提升机制。基础知识:?

受信任的中心化排序器继续为用户交易运行私有内存池

排序器在收到每个交易时加上时间戳

默认情况下,交易将在收到后500毫秒执行

用户可以选择为他们的交易支付额外的优先权费用,给它一个「时间提升」,将时间戳减少最多500毫秒?

提升由以下公式计算:??

F=交易的优先费?

g=可提升的最大时间

c=待定常数

当前搜索者只能通过尽量减少延迟来表达他们对快速包含到Arbitrum排序器的偏好。TimeBoost反而会降低投资于上述策略的动机,因为搜索者现在可以通过他们的优先费用出价来表达他们对快速包含交易的偏好。?

它比简单的FCFS有了明显的改进,但在我看来仍然有一些缺点:

它减少了延迟竞赛的动机,但并没有消除它。最小化延迟将始终允许搜索者出价低于竞争对手,并且图表的曲率使延迟边缘对于高价值MEV机会特别有价值。?

尚不清楚内存池隐私和时间戳如何在单个排序器之外有效地去中心化。?

搜索者的出价缺乏表现力。搜索者只能为更快的收录出价,但他们无法表达更复杂的偏好,就像更灵活的显式拍卖中的情况一样。

相关的是,如果在此级别实施,将无法恢复失败的竞价。

FBA-FCFS

Flashbots的Xin去年为Arbitrum提出了一个替代方案。这种实现Themis的频繁批量拍卖风格的变体。在提案中:

节点向领导者报告部分排序,然后领导者将这些聚合成一个无序的批次。在设定的批次时间「公平粒度」内,假设所有事务都同时发生。

领导者然后通过某种形式的拍卖解决批次内的弱排序。

与时间提升提议类似,有一些想法尝试保证相对较快的交易包含并防止通过受信任的节点抢跑。同样,它允许搜索者通过费用表达他们的偏好,从而减少了延迟竞争的动机)。?

在给定批次的末尾,「快速搜索者」存在剩余的延迟优势,而其他「慢速搜索者」无法竞争:

资料来源:区块空间市场中的延迟军备竞赛问题

这是此类拍卖的一个很好理解的方面。更长的批次时间可能进一步使延迟边缘相关的时间百分比下降,尽管批次价值可能更高。较长的出块时间会对MEV产生其他影响。

延迟边缘总结:

时间提升:较低的延迟总是有利的。

FBA-FCFS:较低的延迟有时是有利的。

关于延迟时间:?

时间提升:所有用户交易在收到时默认延迟500毫秒。

FBA-FCFS:批处理时间为500毫秒,因此可以将这个时间窗口内收到的用户交易包含在其中。

FBA-FCFS带来了更多的可变性,但不支付优先费用的普通用户交易的收录时间平均应该更短。时间在TimeBoost模型中被连续处理,而时间在FBA-FCFS模型中被离散化。

延迟和去中心化

请阅读Phil的这篇文章。

结论

希望现在你对排序器去中心化的路径和相关障碍有一个不错的认识。这是Rollup在未来几年内成熟所需要应对的众多挑战之一。

其他一些有趣的探索领域包括:

不同层的交互:随着排序器去中心化,它们如何与交易供应链的不同部分交互?什么类型的拍卖应该插入去中心化排序器集???

交易费用机制:多维资源定价与状态定价

L2费用市场:收取「L2原生」费用和「L1原生」费用

ZK证明者市场:如何正确激励ZK证明者的去中心化和无许可市场,这是L2费用的一个重要子集。?

Rollup商业模式:Rollup代币和构建它们的团队如何积累价值并实现可持续性。

可升级性和治理:去中心化它们并减少信任假设,同时保持灵活性。

欺诈和ZK证明:建立更强大的机制,例如多证明者。

感谢BenFisch、JoshBowen、Cem?zer、KelvinFichter、ZakiManian、Hasu、RobertMiller、TarunChitra、SreeramKannan以及其他人围绕该主题的投入和讨论。?

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

[0:15ms0-3:631ms