读懂加密内存池:解决 MEV 和审查问题的全新设计空间_EFI:web3游戏开发

原文标题:《EncryptedMempools》

原文作者:JonCharbonneau

编译:0x11,ForesightNews

加密内存池是解决MEV和审查问题的强大工具,目前已有多种可以单独使用的相关方案,它们之间也可以组合使用。

这篇文章概述了JustinDrake围绕该主题的演讲所构建的设计空间。你们中的大多数人可能在第一次观看时感到难以理解,所以我试着简单地进行分解和扩展。

基本思想:允许用户提交加密交易,区块生产者提交这些交易才能解密:

用户加密并广播交易

加密交易提交

交易被解密

事务执行

两个问题似乎可以迎刃而解:

MEV:如果我看不到它,我无法抢先交易

审查:除非排除所有加密交易,否则我无法审查交易

这里需要确保的一个关键点是保证解密不依赖于用户。有几种方法可以实现这一点:

1.In-flight

相信某个第三方,私下向他发送数据,他可以解密和查看数据,但承诺在数据提交到链上之前不会公开披露。这就是FlashbotsProtect等产品的工作方式。

2.可信硬件

你可以利用受信任的硬件。明文可以在受信任的硬件中运行,但在提交交易之前不会公开解密。最著名的例子是FlashbotsSUAVE的SGX。

3.门限加密/解密

一个委员会可以联合起来强制解密密文,但是需要签名者达到一个门槛才能做到这一点。例如,你的「阈值」可能是需要2/3的验证者同意解密。TED已经在几个不同的领域进行了研究,包括:

以太坊L1——ShutterizedBeaconChain

ShutterNetwork——以太坊L2s

Arbitrum——Chainlink的FSS

Osmosis&Anoma——Ferveo

ShutterizedBeaconChain

仔细查看ShutterizedBeaconChain提案,验证器的一个子集使用分布式密钥生成器生成公钥/私钥对。每个人都可以看到公钥,但私钥在委员会中被分成多份保管。重建私钥和解密需要密钥份额达到一定阈值。?

用户可以有选择地加密交易,这些交易在其内容被解密和执行之前被包含在链上。区块生产者使用明文交易和加密交易创建区块。?

在生成并证明区块n-1之后,keypers应该生成并发布区块n的解密密钥。该密钥可以解密区块n内的交易。区块n必须包含解密密钥才能被视为有效。区块的后状态是这样计算的:即在执行区块中的明文交易之前执行区块中的加密交易。

缺点

TED有几个缺点:

缺乏问责机制:与传统的安全假设不同,这里的恶意行为不可归因或不可报告。Keypers可以立即解密,你无法对其进行归因。即使你假设验证者的行为与激励相容,验证者集之外的三字母机构也可能会对他们施加影响。?

诚实多数假设:不诚实的委员会可能会产生问题,例如选择从不解密某些消息,或秘密解密他们不应该解密的消息。在大多数情况下,区块链实际上依赖于经济上理性的多数。通过阈值加密,这个假设被转移到真正诚实和无私的多数。

破坏协议的稳定性:本质上是上面两点的结合,TED增加了验证者作恶的动机,并且不容易受到惩罚。

活跃度减弱:更高的解密阈值增强了协议安全性)。然而,这直接削弱了活跃度。例如,大规模的网络中断会导致一半的验证者中断,现在可能造成协议停止。特别是对于非常强调「第三次世界大战」活跃度的以太坊来说,这是一个不可接受的权衡。?

糟糕的用户体验:TED可能会根据实施细节增加不同程度的延迟和成本。

次优价值分配:让我们看一个简单的抢跑示例:

1ETH价格为1000美元?

如果我将交易发送到vanilla内存池——我得到990美元

如果我将交易发送到TED内存池——我得到995美元

我将交易发送到最佳订单流拍卖——我得到了1000美元

在这种情况下,你会将钱留在桌面上让其他人拿走。一个经济上理性的用户应该公开足够的订单信息,这样他们就可以得到接近订单全部价值的补偿。他们不应该天真地对他们的交易进行阈值加密,隐藏它提供的价值。?

这是一个超理想化的例子,但你明白了,掩盖问题并不总能解决问题。TED可以是一个有用的工具,但它不是MEV的灵丹妙药。在某些情况下,CR来说可以说更好。?

此外,以太坊带来了额外的复杂性。例如,它缺乏即时终结性引入了围绕重组的问题。我相信至少在以太坊的L1中,这里的权衡利大于弊。增加以太坊的信任假设,增加共谋的动机,以及降低其活跃度所带来的伤害可能比好处更多。?

然而,与以太坊L1相比,这些权衡中的一些对于L2或其他L1可能更容易接受。?

4.延迟加密/解密

使用延迟加密,你可以将加密信息设置为在一定时间后自动解密,这是与VDF相关的顺序计算。

要实际实施DED,你需要VDFASIC。幸运的是,以太坊基金会和协议实验室一直致力于构建它们,最近获得了GlobalFoundries构建的芯片的第一批测试样本。这些VDF评估器应该能够进行极快的顺序计算。这些VDFASIC也适用于时间锁定谜题和DED。?

VDF还需要生成SNARKs。这可以使用GPU来完成,但理想情况下,以太坊基金会也希望为SNARK生产相关的ASIC。?

总的来说,你不再信任某个委员会,因此通常首选安全假设。但是,需要专门的硬件并不那么理想,所需的延迟还可能会增加系统的延迟。有趣的是,你可以结合使用TED+DED的优势……

5.见证加密/解密

WED很强大,但别高兴太早,它不会很快到来。这是非常奇特的东西,还需要很多年来实现。但它很酷并且有助于理解,所以我将简要介绍一下。?

WED允许任意见证人强制解密密文。例如,你的规则可以是「只有在以太坊完成包含加密有效负载的区块后才能解密」,并且只有在证明这一点的情况下才会解密。你可以想象基本上任何你想要实现的复杂语句都需要SNARK。

WED实际上是TED或DED的概括。你甚至可以构建两者的混合体。例如,指定证人可以证明:

快乐的结果:门槛委员会已经签署了解密,或者?

预备方案:所需时间已过,返回以延迟解密

这提供了一个预备,以防阈值委员会没有响应。这也允许你在参数化m/n阈值假设时更加保守。

快乐的结果:最佳用户体验,整个委员会即时确认?

预备方案:延迟和UX暂时受到影响,但活性得以保留

实际上,WED可能会针对你想要的任何声明验证SNARK。例如:?

TED:你可以有一个SNARK来证明「我有n个签名中的m个签名」来强制解密。

DED:你可以使用VDF并进行顺序计算。然后在你的计算结束时,你有一个简短的证明。然后你拿那个简短的证明并将它包装在一个SNARK中,然后输入它来强制解密。

同态性

这里的每个加密方案,你都可以具有同态性。也就是说,可以创建阈值FHE、延迟FHE和见证FHE方案,以实现对密文的任意操作。

in-flight和可信硬件解决方案也可以模拟相同的功能——对私有数据进行操作。这是因为在这两种情况下,受信任的第三方或硬件都可以访问明文本身进行操作。不过,在理想情况下,我们希望移除这些信任假设,仅依赖强化密码学。

我们可以想象一个例子:

m1=事务1

m2=事务2

f(x)=构建一个区块?

然后所有五个解决方案都可以复制以下功能:?

当我们考虑如何隐藏交易元数据和使用加密输入构建最佳区块时,请记住这种能力。理论上,这里的五个选项中的每一个都可以用于下面需要「同态」的解决方案。?

元数据

元数据是提供有关其他数据的信息的数据,但不提供该数据的内容。出于我们的目的,交易元数据可以包括发送方的IP地址、随机数、Gas支付等。

理想情况下,我们希望隐藏尽可能多的元数据。否则,它可能会泄露信息,让外人可以推断你的交易。但是,我们需要元数据来验证交易是否有效、是否支付了必要的费用、是否是垃圾邮件等。

让我们来看看屏蔽各种元数据的一些解决方案。

1.IP地址-Tor

非常简单——人们可以使用像Tor这样的服务来私下广播并屏蔽他们的IP地址。

2.签名-SNARK

你需要在p2p级别知道加密交易是有效的,特别是它具有有效签名。我们可以使用SNARK来证明签名有效,这将伴随每笔加密交易。SNARK包含三个重要部分:

用户想证明自己的交易密文是有效的,它对应交易明文,它的签名是有效的。要证明任何签名有效,你需要与帐户关联的公钥来验证它。

查找以太坊状态根。

提供与此状态根相对应的发送者公钥Merkle证明

验证签名,你需要根据状态根验证发件人公钥Merkle证明。用SNARK证明你的发送者公钥Merkle证明是有效的并且你的签名是有效的。

3.Gas支付——SNARK

你需要证明加密交易的发送方有足够的ETH来支付这笔费用。我们可以再次使用SNARK。?

这是一个类似的过程,但现在你提供了一个Merkle路径到状态根,它证明了发送者的余额。你验证Merkle路径并验证余额是否足以支付所需的Gas。

仅执行反序列化交易、检查其余额和检查签名等基本操作所需的最低Gas。你可以规定发件人始终必须支付此最低金额。?

但是在执行时间上,你还需要有实际交易本身的Gaslimit,这个Gaslimit也可以加密。所以当你去实际执行交易本身时,你会检查发送者是否有足够的余额来支付当时交易的全部Gas:

如果是:运行交易并在最后发出退款

如果否:中止交易,发送方只需支付21000Gas

4.发送者和随机数-SNARK

随机数是一个值,等于从一个地址发送的交易数量。用户的随机数从他们的地址开始交易时每次交易都会增加1。?

我们今天拥有随机数的一个原因是,用户无法通过大量交易向mempool发送垃圾信息,以增加他们交易被执行的可能性。节点将只查看具有该随机数的一笔交易并丢弃其他交易。?

对于加密交易,你将通过SNARK证明其随机数是之前的随机数+1。然而,如果节点将不再能够分辨出许多加密交易具有相同的随机数,那么上述的DoS攻击可能会带来不利影响。

为了保留这种反DoS属性,我们想添加一个「重播标签」。它对交易进行了独特标记,因此你不能再为一个地址发送大量交易垃圾。要创建此标签,你可以简单地散列。因为随机数和私钥都是固定的,如果用户尝试使用相同的随机数和私钥发送两者,不同的交易将具有相同的重播标签。

最后,你可能希望保留一定程度的灵活性。假设Gas价格已经变动,你有理由希望以更高的价格重新广播交易。为了缓解这种情况,你可以散列。现在,你可以在每个slot调整一次你的交易,每个slot每个地址只能发送一笔交易。??

5.数据大小-同态

加密数据大小为n的明文将创建大小为n的密文。即使是这个大小也足以从概率上计算出某些交易。我们可以通过「填充」来缓解这个问题——在加密之前向明文添加0,将位数扩展为2的下一次幂。?

在以下示例中:

白色=填充的0

其他颜色=实际交易数据

当你构建区块时,你可以连接这些密文,但这有两个问题:

不完美的打包——额外的0意味着你必须为额外的数据可用性付费

不完美的隐私-也许2的幂就提供了足够信息。交易规模分布不明确,因此某些规模仍可能从概率上揭示足够的信息。

一个更好的解决方案涉及「剪掉」填充:?

将每笔交易填充到最大大小并同态加密

在密文上应用一个函数以有效地打包明文,删除不必要的填充

现在你得到了最佳打包。

通过填充到「最大」尺寸,这实际上可以将最大值设置为实际区块大小限制转换为的值。这意味着将每个事务填充到xkB的大小。或者,如果说99.9%的交易通常在ykB范围内,你可以设置更小更实用的ykB大小。

同样,可以使用可信硬件而不是前面讨论的FHE来模拟这种「剪辑」。例如,你可以运行SGX并将加密交易接收到你的可信飞地。在飞地中,可以对数据进行明文操作,以剪掉不必要的填充以密集打包区块。然后数据被加密并运回,随后是一种强制解密方法。?

请注意,在任何一种情况下,输出都应该是某个固定大小,因此你可能会留下少量填充。?

交易包选择:同态和不相交的状态访问列表

假设我们解决了上面的所有问题,区块生产者能够根据大小将所有内容最佳地打包到一个块中。但我们还有另一个问题——区块生产者能否在经济方面最优地打包所有东西?我们希望在不丢弃价值的情况下去中心化构建区块。否则,它无法与中心化实体竞争。

解决方案1-FHEEVM

直接的答案:完全在FHE中运行EVM。这将允许去中心化构建最佳区块,为区块生产者获取最大价值。他们选择并排序使价值最大化的交易。?

不幸的是,这并不是件简单的事。FHE电路最大的成本是它的「深度」。特别是,它的乘法深度非常重要。例如,前面描述的删除填充的事务「裁剪」是一个相当「浅」的电路。通过硬件加速,此类用例可能在2-3年内在计算上可行。?

但是,使用FHE运行整个EVM需要非常深且复杂的电路。我们终于开始在zkEVM电路方面取得一些有意义的进展,但FHEEVM甚至更遥远。?

再次注意,使用可信硬件模拟此功能也是可行的。

解决方案2-状态访问列表

或者,我们可以更有限地使用FHE和访问列表。这比运行完整的FHEEVM更容易实现——它是一个更浅的电路。在这个设置中,交易包可以包括一个加密的状态访问列表及其出价。这确切地指定了他们的包将访问状态的哪一部分。?

现在,区块生产者的同态电路只需为具有不相交状态访问列表的交易包挑选最高出价。?

请注意,这并不是严格意义上的最优。例如,一个区块中的第二高出价(T2)可能达到与最高出价(T1)完全相同的状态。在这个访问列表范例中,区块生产者会丢弃第二笔交易。但是,有可能T1和T2都有效。在这种情况下,FHEEVM将获得更多价值。?

它并不完美,但从我们今天的情况来看,这条捷径应该足够接近最优了。绝大多数MEV仍然会使用不相交的访问列表,因为像上面这样的冲突示例非常罕见。?

6.时间戳-同态

你甚至可以通过允许验证者进行「虚拟」交易来试图隐藏交易存在的泄漏,因此内存池总是被填满。验证者还需要一个SNARK来证明他们是被允许创建这些虚拟交易的验证者。当「真实」交易出现峰值时,验证者将广播较少的虚拟交易。当真实交易下降时,验证器将发出更多虚拟交易。?

假设一切都使用FHE加密,你将能够检测到添加到相应交易的「虚拟标志」。你可以在打包实际区块时忽略这些交易。

状态差异-FHEEVM

背景速览:ZKRollup的一个优势是他们不需要在链上发布完整的交易数据。他们发布状态更新之间的「状态差异」就足够了。相反,OptimisticRollups必须在链上发布完整数据,以防对欺诈证明进行仲裁。这种较低的数据要求为ZKRollup节省了成本,因为它们在数据可用性层消耗的资源较少。?

将这一点带入我们的对话中——理想情况下,你不希望在加密内存池的情况下失去这种好处。你想要获得加密的内存池,并且仍然保留ZKRollup仅发布状态差异的能力。答案在这里——FHEzkEVM。听起来很酷,但你可能又要等待良久。

一个缺点是单独发布状态差异可能会降低Rollup完整节点的响应速度。例如,在纯分叉选择规则Rollup中,完整节点可以在数据可用性层完成并确保有效性时立即完成他们对Rollup的视图。如果你只发布状态差异,即使是完整的节点也需要提交ZK证明才能确认他们对Rollup的视图。就目前的情况而言——这些证明需要一段时间才能生成,但可扩展的数据可用性层有望很快变得非常便宜。

结论

加密内存池是一个迷人且有前途的设计空间,但仍然存在一些实际挑战。例如,你可能只是将某些问题转移到堆栈的其他地方。钱包可以在源头上审查你以防止交易加密/路由,他们可以提交有效负载以在你的交易前/后运行等。一个可能的答案是用户在本地创建交易而不依赖于服务提供商。?

关键是这里没有灵丹妙药,但如果设计得当,它们可能是解决方案的重要组成部分,可以通过不同的功能和信任假设来改善当前情况。

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

金智博客

[0:0ms0-4:359ms