在解密区块之前,TPM 必须确信两件事:
提议者签名——对区块头的承诺可以防止提议者窃取 mev。如果提议者试图在构建区块主体被揭示后为自己窃取 MEV( 通过提出一个替代区块 ),任何人都可以提交其原始承诺。这证明提议者在相同区的块高度签署了两个区块→他们会被踢出局。
提议者签名的有效性证明——防止聚合器 + 提议者串通。仅仅存在提议者的承诺是不够的,它必须是可用的。如果只有聚合器收到承诺,他们可以简单地将其永远隐藏起来,让提议者提出一个替代的 MEV 窃取区块。TPM 必须确信原始提议者签名实际上是公开的。
有几种方法可以证明提议者签名的有效性:
验证者——验证者可以验证是否看到提议者的签名,然后 TPM 可以检查提议者和这些验证者的签名。这需要更改以太坊协议。
低安全性的实时数据可用性 oracle——像 Chainlink 这样的东西可以证明签名存在并将被重新广播的事实。
聚合器内的 M of N 假设——聚合器本身可以是一个分布式的 M of N 协议。在聚合器协议内可能有一个阈值投票,你对此会有一个诚实的假设。
想法 2:合并不相交的 bundle 和顺序拍卖
合并不相交的 bundle
这种方法需要 N 中的 M 个聚合器,但是我们可以去掉 TPM。这个过程看起来像这样:
搜索者发送的 bundle 被加密到一个阈值密钥。bundle 包含一个访问列表 ( 它们访问的帐户和存储 slot 的列表 ) 和一个证明正确性的 SNARK( 注意技术复杂性以快速生成此列表 )。
聚合器合并不相交的 bundle,使总出价最大化。( 我们这里讨论的只是整合不一致的出价,但有可能进一步改善这一点。)
聚合器必须计算 state root
最后一步是棘手的。计算 state root 需要清楚地看到交易,或者至少看到它们的状态更新。然而,即使看到状态更新也足以进行 mev 窃取。对于何时计算状态,我们有两个选项:
让一个聚合器节点解密,然后计算状态。但是,他们可以与提议者串通。
只有在提议者承诺支持接收到的任何区块和 state root 之后,才会计算 state root。该设置将利用 EigenLayer。提议者发送一条链外消息,承诺他们生成的唯一区块会包含这组 bundle( 无论它们是什么 )。只有在提议者做出承诺之后,bundle 才会被解密,并计算出 state root。如果提议者违反了这个承诺,他们就会被踢出局。
注意,这种 EigenLayer 结构还可以避免前面提到的 SNARK 要求。这里的提议者可以预先提交一个替代区块或替代区块组合,如果提交给他们的区块被证明是无效的,就会使用这个备选区块。第一个区块组合的无效性可以用欺诈证明来检查。
顺序拍卖
EigenLayer 技术可以直接用于不相交的 bundle 合并,或者它也可以依赖于每个 slot 内的多轮顺序拍卖。
例如,以下情况可能在单个区块内发生:
第一轮
提议者签署一个 EigenLayer 消息,预先同意一些交易 ( 包括 bundle1),使他们在这一轮的出价最大化,以开始区块。
建设者揭示区块的这部分内容
提议者公布状态差异
第二轮
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 个。多项式承诺在每一行的水平方向和每一列的垂直方向上都在运行。