以太坊在很大程度上是基于最坏的假设设计的。然而,我们可以(也应该)同时努力避免这种最坏情况的假设。
原文标题:Decentralizing the Builder Role
原文作者:Jon Charbonneau
原文来源:substack
编译:RR,老雅痞
简介
根据Vitalik在《Endgame》中提出的观点,所有的道路似乎都通向:
中心化的建设者仍然不是很理想,那么我们能不能做得更好呢?有两种方法解决这个问题:
本文将主要围绕Vitalik最近在SBC MEV研讨会上的演讲展开。我将对此进行分解并提供进一步的分析。
去中心化的建设者能够获胜吗?
这里有两个潜在的问题:
去中心化什么?
成为中心化建设者很容易。下面考虑了分布式建设者需要在多个搜索者和用户之间聚合bundle和交易的一些可以去中心化的设想:
挑战
如果我们想在整个区块生产供应链中避免可信的第三方,有几个障碍需要克服。我将在这里谈到的一些挑战包括:
如何保护搜索者免受MEV窃取?
如何允许聚合机制来组合搜索者输入?
如何确保聚合机制能够真正发布该区块?
如何保护搜索者免受聚合器+提议者的勾结?
想法1:可信硬件
这种方法利用可信硬件—TPM(可信的平台模块)。它是这样的:
在解密区块之前,TPM必须确信两件事:
有几种方法可以证明提议者签名的有效性:
想法2:合并不相交的bundle和顺序拍卖
合并不相交的bundle
这种方法需要N中的M个聚合器,但是我们可以去掉TPM。这个过程看起来像这样:
最后一步是棘手的。计算state root需要清楚地看到交易,或者至少看到它们的状态更新。然而,即使看到状态更新也足以进行mev窃取。对于何时计算状态,我们有两个选项:
注意,这种EigenLayer结构还可以避免前面提到的SNARK要求。这里的提议者可以预先提交一个替代区块或替代区块组合,如果提交给他们的区块被证明是无效的,就会使用这个备选区块。第一个区块组合的无效性可以用欺诈证明来检查。
顺序拍卖
EigenLayer技术可以直接用于不相交的bundle合并,或者它也可以依赖于每个slot内的多轮顺序拍卖。
例如,以下情况可能在单个区块内发生:
第一轮
第二轮
4.提议者签署一个EigenLayer信息,预先同意额外的交易(包括bundle2),这使他们在这一轮的出价最大化,以继续区块
5.建设者披露该区块的这部分内容
6.提议者发布状态差异
第三轮……
一个缺点是这种合并可能是次优的。例如,提议者可能已经预先同意bundle1,然后他们将获得与bundle1冲突的更有利可图的bundle2。他们将不得不拒绝这个bundle2。
一个具有相同订单流的中心化建设者可以看到所有的交易,可以在他们构建区块的最后阶段包含bundle 2(因为他们没有预先同意bundle 1)。
另一个潜在的缺点是,顺序拍卖可能使非原子MEV相当困难,因为如果世界状态发生变化,搜索者将没有办法取消或更新他们的出价(一旦承诺)。如果你需要在交易被列入的前10几秒承诺,你就不能像保留更新出价的能力那样承担那么多风险。
然而,该示例假设订单流相同。在现实中,由于它提供的保证,分布式建设者可能会在接收更多订单流方面胜过集中式建设者。更好的保证→更多的订单流→建立最有利可图的区块(即使有其他缺点)。因此,提议者选择这种结构(切断自己接受其他建设者的区块)就有了经济意义,因为分布式构建者始终提供最高价值的区块。
要想成功,分布式建设者提供的价值可能需要超过它带来的缺点(包括合并效率较低和执行非原子MEV的挑战)。
区块构建后的Danksharding
Danksharding对验证者的节点要求很低。单个节点只负责下载区块的部分内容。
然而,最初提出的设计将有意义地增加构建以太坊区块的硬件和带宽需求(尽管验证者总是可以以分布式的方式重构)。那么问题来了,我们是否能以分布式的方式进行初始构建。这这样就不需要一个单一的高资源实体来构建整个区块、计算所有KZG承诺、连接到许多子网来发布它,等等。
实际上,以分布式的方式构建是非常可能的。分布式纠删编码并不是那么难。
首先,包含数据交易的人要负责对其进行编码,并将blob传播到子网和数据可用性网络。
当聚合器选择包含哪些数据交易时,它们可以使用实时DA oracle。聚合器本身不能仅凭自己进行数据可用性抽样(DAS),因为当只有一方进行DAS时,这是不安全的。所以一些分布式oracle需要下载全部内容。
然后网络就可以从这里填写列。记住,数据是在2D模式中扩展的。例如,每个blob是512块,但它将擦除编码为1024个块。然后扩展也是纵向的。例如,你在图像中有32个blob,然后被垂直扩展成64个。多项式承诺在每一行的水平方向和每一列的垂直方向上都在运行。
KZG承诺
多亏了将用于以太坊分片设计的KZG的线性承诺,你可以填写这些列。
KZG在承诺(com)中具有线性。例如,你可以说com(A) + com(B) = com(A+B)。
证明中也有线性关系。例如如果:
更正式地讲:
正是这种线性属性使得网络可以填入所有东西。例如,如果你有0列中0-31行的证明,那么你可以使用它来生成0列中32-63行的证明。
只有KZG具有这种承诺线性和证明线性(IIPA和Merkle树不满足这两个条件)。
这里想说的是KZG有一些非常好的属性,允许分布式区块构建和重构。你不需要要求任何一方处理、扩展所有数据、计算所有KZG承诺并传播它们。它它们可以针对每行和每列单独执行。如果这样做,我们就没有剩余的超级节点要求:
额外的建设者服务-预先确认
以太坊的区块时间很慢,而用户希望有快速的区块时间。以太坊做出这样的牺牲主要是希望支持一个大型的去中心化验证者集。但我们能做到两全其美吗?
以太坊聚合用户已经开始了解并喜爱这些预先确认。建设者创新可以在基础层提供类似的服务。
例如,建设者可以同意:
如果建设者不遵守他们的承诺,他们可以被砍掉。
在未来使用并行EVM时,你还可以使用更高级的预先确认。例如,只要用户关心的状态没有被更改,即使在给出预先确认之后,建设者也可以在区块内重新排序一些交易。
分布式建设者可以提供预先确认吗?
是的。分布式建设者可以只运行一些内部共识算法,比如Tendermint,它的区块时间很快。建设者可能会因以下情况而受到处罚:
请注意,在这里需要对最终建设者签名进行某种类型的帐户抽象,以获得最好的安全性。阈值BLS是不可归因的,这意味着如果建设者只用BLS签署区块,我们不知道如果出现问题,谁应该被削减。抽象签名可以解决这个问题。
对于任何建设者预先确认服务(分布式或集中式),请注意预先确认只与他们实际构建成功区块的能力相同。更主流的建设者和更高的纳入率可以提供更好的预先确认。
然而,你可以在分布式建设者处获得更强的预先确认,比如EigenLayer结构。如果当前的提议者选择了EigenLayer,并且你得到了预先确认,那么你的交易就必须被包含。你不再把赌注押在概率上。
分布式建设者的优点和缺点
假设所有的技术都是可行的,且一个分布式的建设者有成千上万的参与者。你甚至可以让Ethereum验证者中的很大一部分选择加入EigenLayer结构,提供亚秒级的预先确认。与集中式建设者相比,这种分布式建设者有一些不错的竞争优势:
集中式建设者可能还有其他优点,有些是固有的,有些是基于分布式建设者的构造:
最后的想法
以太坊在很大程度上是基于最坏的假设设计的。然而,我们可以(也应该)同时努力避免这种最坏情况的假设。本文描述的两个想法提供了一些更有趣的可能性。然而,这些建议远远不是详尽无遗的。
此外,这不应该被视为“独占订单流的问题神奇地消失了,所以我们不再需要围绕它进行构建。”dApp必须继续围绕MEV在机制设计上进行创新,包括降低对排他订单流的需求。MEV是不会消失的。
责任编辑:Felix