加密内存池是解决MEV和复习问题的有力工具。目前有很多相关方案可以单独使用,也可以组合使用。
本文概述了贾斯汀德雷克(Justin Drake)关于这一主题的演讲(哥伦比亚、阿姆斯特丹和Flashbots烘焙)所构建的设计空间。你们大部分人第一次看的时候可能会觉得很难理解,所以我尽量简单的分解展开。
基本思路:允许用户提交加密交易,区块生产者提交后才能解密这些交易;
*用户加密和广播交易。
*加密交易提交
*交易已解密。
*事务执行(注意:提交、解密和执行可能在单个槽中)
两个问题似乎很容易解决:
*MEV:如果我看不到它,我就不能打败交易。
*审核:除非排除所有加密交易,否则我无法审核交易(如果很多交易都加密,成本可能会很贵)。
这里要保证的一个关键点是保证解密不依赖于用户。有几种方法可以实现这一点:
1.In-flight
信任第三方私信数据给他,他可以解密查看数据,但是承诺在数据提交到链上之前不公开披露。Flashbots等产品就是这样保护工作的。
2. 可信硬件
您可以使用可信的硬件。明文可以在可信硬件中运行,但在提交交易前不会公开解密。最著名的例子是Flashbots SUAVE的SGX。
3. 门限加密 / 解密(TED)
一个委员会可以联合起来强制解密密文,但它需要签名者达到一个阈值才能做到这一点。比如你的“门槛”可能是2/3验证者同意解密。TED在几个不同的领域进行了研究,包括:
*以太坊l 1——门控信标链
*快门网——以太坊L2s
* FSS的*Arbitrum ——Chainlink
*渗透异常——
Shutterized Beacon Chain
仔细观察快门式信标链提议,验证器的子集(“密钥对”)使用分布式密钥生成器(DKG)来生成公钥/私钥对。每个人都可以看到公钥,但私钥在委员会中被分成多个保管。重建私钥和解密需要密钥份额达到一定的阈值(例如2/3)。
用户可以有选择地对交易进行加密,这些交易在其内容被解密和执行之前包含在链中。块生产者使用明文事务(立即执行)和加密事务(计划在未来的块高度)来创建块。
在生成并证明块n -1之后,密钥持有者应该生成并发布块N的解密密钥.该密钥可以解密块n中的事务。块n必须包含解密密钥才能被认为是有效的。通过在执行块中的明文事务之前执行块中的加密事务(按照它们的设置顺序)来计算块的后状态。
缺点
泰德有几个缺点:
缺乏问责机制:与传统的安全假设不同,这里的恶意行为是不可归因的,也是不可报告的。键盘手可以马上解密,你不能归属。即使假设验证者的行为与激励相容,验证者集合外的三字母机构也可能对其施加影响。
诚实多数假设:不诚实的委员会可能会引发问题,比如选择永远不解密某些消息,或者秘密解密他们不应该解密的消息(比如在政府机构的要求下,或者自私地提取MEV)。大多数情况下,区块链实际上依靠的是经济理性的多数(即没收的惩罚通常超过恶意双花的经济激励)。通过门限加密,这个假设被传递给真正诚实无私的大多数。
破坏协议的稳定性:本质上是以上两点的结合。TED增加了验证者作恶的动力,不容易被惩罚。
活动减少:更高的解密阈值增强了协议安全性)。但是,这直接削弱了活性。比如大规模的网络中断会导致一半的校验器中断,现在可能会导致协议停止。尤其是对于以太坊这种非常强调三战活跃度的地方,这是一种无法接受的取舍。
用户体验差:TED可能会根据实现细节不同程度的增加延迟和成本。
次优价值分配:让我们看一个简单的先跑例子:
*1 ETH价格为1000美元。
*如果我将交易发送到vanilla内存池——,我会得到990美元(搜索者的前跑和后跑会产生10美元的净利润)。
*如果我将交易发送到TED内存池——,我得到995美元(搜索者无法全身而退,但我推高了当地现货价格,为搜索者创造了5美元的套利机会)。
*我将交易发送到最佳订单流拍卖——,我获得了1000美元(我没有获得前置或后置。或者类似地,我确实得到了前跑和/或后跑,但搜索者必须在竞争性拍卖中出价10美元才能获得这样做的权利,最终结果是相同的。)
这种情况下,你会把钱留在桌子上让别人拿走。一个经济理性的用户应该披露足够多的订单信息,这样他们就可以获得接近订单全部价值的补偿。他们不应该天真地对他们的交易进行阈值加密,并隐藏它提供的价值(允许其他人获取它)。
这是一个超级理想的例子,但是你看,掩盖问题并不总能解决问题。TED可以是一个有用的工具,但它不是MEV的灵丹妙药。在某些情况下,CR更好。
此外,以太坊带来了额外的复杂性。例如,它缺乏直接终结性(尽管有一天这可能会随着单插槽终结性而改变),这给重组带来了问题。我相信至少在以太坊的L1,这里的权衡是利大于弊的。增加以太坊的信任假设,增加合谋动机(未被发现),降低其活跃度,可能弊大于利。
然而,与以太坊L1相比,L2或其他L1人可能更容易接受这些权衡。
4.延迟加密 / 解密(DED)
使用延迟加密,可以设置加密信息在一定时间后自动解密,这是一个与VDF相关的顺序计算。
要真正实现DED,您需要VDF ASIC。幸运的是,以太坊基金会和协议实验室一直在努力构建它们,最近获得了GlobalFoundries构建的芯片的第一批测试样本。这些VDF评估器应该能够执行极快的顺序计算。这些VDF ASIC也适用于时间锁定难题和DED。
VDF还需要生成SNARKs。这可以使用GPU来完成,但理想情况下,以太坊基金会也希望为SNARK生产ASIC。
一般来说,你不再信任某个委员会,所以通常首选安全假设。但需要特殊的硬件并不理想,所需的延迟也可能增加系统的延迟。有趣的是,你可以结合TED DED的优点.
5.见证加密 / 解密(WED)
WED很强,但是不要太高兴,它不会很快到来。这是一件很奇怪的事情,需要很多年才能意识到。但是很酷,有助于理解,所以我简单介绍一下。
WED允许任何证人强制解密密文。比如你的规则可能是“只有在以太坊中完成包含加密净荷的块后才能解密”,只有证明了这一点才会解密。你可以想象,基本上任何你想实现的复杂句子都需要SNARK。
WED其实是TED或者DED的概括。你甚至可以建立两者的混合。例如,指定的证人可以证明:
*好结果:门槛委员会已经签署了解密,或者
*预备计划:要求时间已过,返回延迟解密。
这为阈值委员会不响应的情况提供了准备。这也让你在参数化m/n阈值假设时更加保守(即你可以要求每个委员会成员或者几乎所有成员签字)。
*皆大欢喜的结果:最好的用户体验,马上得到全委会的确认。
*预备方案:延时和UX暂时受影响,但活动保留。
事实上,我们可以根据您想要的任何语句来验证SNARK。例如:
*TED:你可以有一个SNARK来证明“我有n个签名中的m个”来强制解密。
*DED:可以用VDF,做顺序计算(很贵)。然后在你计算的最后,你有一个简短的证明。然后,您将这个短证书封装在一个SNARK中(使它更短),然后输入它来强制解密。
同态性
这里的每一个加密方案(门限、延时、见证),你都可以同态。也就是说,可以创建门限FHE、延迟FHE和见证FHE方案来实现对密文的任意操作。
飞行中和可信硬件(例如,SGX)解决方案也可以模拟相同的功能——来操作私有数据。这是因为在这两种情况下,可信的第三方或硬件都可以访问明文本身来进行操作。然而,在理想情况下,我们希望去除这些信任假设,只依赖于增强的加密技术。
我们可以想象一个例子:
*m1=交易1
*m2=交易2
*f(x)=搭积木。
所有五种解决方案都可以复制以下特征:
当我们考虑如何隐藏事务元数据并使用加密输入来构建最佳块时,请记住这种能力。理论上,这里的五个选项中的每一个都可以用于下面需要同态的解决方案。
元数据
元数据是提供关于其他数据的信息的数据,但不提供数据的内容(例如消息的文本或图像本身)。出于我们的目的,交易元数据可以包括发送者的IP地址、随机数、汽油费用等。
理想情况下,我们希望隐藏尽可能多的元数据。否则,它可能会泄露信息,以便外人可以推断您的交易(它可能会为他们提供足够的信息,以试图窃取或审查等。).但是,我们需要元数据来验证交易是否有效,是否支付了必要的费用,是否是垃圾邮件等。
让我们来看看一些阻止各种元数据的解决方案。
1. IP 地址 - Tor
很简单。——人可以使用Tor这样的服务进行私播,屏蔽自己的IP地址。
2.签名 -SNARK
您需要知道加密的事务在p2p级别是有效的,特别是如果它有有效的签名。我们可以使用SNARK来证明签名是有效的,这将伴随着每一个加密的交易。SNARK包含三个重要部分:
用户希望证明自己的交易密文是有效的,它对应的是交易明文,它的签名是有效的。为了证明任何签名都是有效的,您需要与帐户相关联的公钥来验证它。
*找到以太坊状态的根(公共)。
*提供对应于此状态根(私有)的发送方公钥Merkle证书
*要验证签名,需要根据状态根验证发送方的公钥Merkle证书。用SNARK证明你的发件人公钥Merkle有效,你的签名有效。
3. Gas 支付——SNARK
你需要证明加密交易的发送方有足够的ETH来支付这笔费用。我们可以再次使用SNARK。
这是一个类似的过程,但是现在您提供了一个到状态根的Merkle路径,它证明了发送方的余额(不是发送方的公钥)。您验证Merkle路径,并验证余额是否足以支付所需的汽油。
只执行基本操作所需的最少Gas,如反序列化事务、检查其余额和检查其签名。您可以规定寄件人必须始终支付最低金额。
但是在执行时间上,你还需要有实际事务本身的Gas限制,也可以加密。因此,当您实际执行交易本身时,您将检查发送方是否有足够的余额来支付当时交易的所有汽油:
*如果是:运行交易并在结束时发出退款。
*如果否:交易终止,发送方只需支付21000气。
4. 发送者和随机数 - SNARK
随机数是一个值,等于从一个地址发送的交易数量(或一个帐户创建的合同数量)。用户的随机数会在每次从他们的地址开始交易时增加1。
我们今天之所以会有随机数,一个原因就是用户无法通过大量的事务向mempool发送垃圾邮件(DoS攻击),从而增加自己的事务被执行的可能性。该节点将只查看具有随机数的一个事务,并丢弃其他事务。
对于加密交易,你要通过SNARK证明这个随机数是之前的随机数1。但是,如果节点将不再能够区分许多加密交易具有相同的随机数,则上述DoS攻击可能会带来不利影响。
为了保持这个反DoS属性,我们想加一个“replay tag”。它唯一地标记了交易,所以你不能向一个地址发送大量的交易垃圾。要创建这个标签,你可以简单地散列(随机数,私钥)。因为随机数和私钥都是固定的,所以如果用户试图用相同的随机数和私钥发送两者,不同的事务将具有相同的重放标记。
最后,您可能希望保留一些灵活性。假设天然气的价格发生了变化,你有理由希望以更高的价格转播交易。为了缓解这种情况,可以hash(随机数,私钥,槽)。现在,您可以在每个插槽中调整一次您的事务,并且每个插槽和地址只能发送一个事务。
5.数据大小 - 同态
加密数据大小为n的明文会产生大小为n的密文,即使是这个大小也足以从概率上计算一些交易。我们可以通过“垫料”来缓解这个问题。——加密前在明文上加零,将位数扩展到2的下一次幂(例如,在5位密文上加三个零)。
在以下示例中:
*白色=填充0
*其他颜色=实际交易数据
当您构建一个块时,您可以连接这些密文,但有两个问题:
*不完美的包装——额外的零意味着您必须为额外的数据可用性付费。
*不完善的隐私-也许2的幂提供了足够的信息。交易规模的分布并不明确,所以有些规模在概率上可能还是透露了足够的信息。
一个更好的解决方案是“裁剪”填充:
*将每个事务填充到最大大小(此处为16),并对其进行同态加密。
*对密文应用一个函数,有效地封装明文,删除不必要的填充。
现在你有了最好的包装。
通过填充到“最大”大小,这实际上可以将最大值设置为实际块大小限制转换成的值(即,如果30mm气体转换成大约x kB)。这意味着将每个事务填充到x kB的大小。或者,如果99.9%的事务通常在y kB的范围内,可以设置一个更小更实用的y kB大小。
类似地,可信硬件可以用来模拟这种“削波”,而不是前面讨论的FHE。例如,您可以运行SGX,并接收加密交易到您的可信飞地。在enclaves中,可以以纯文本形式操作数据,删除不必要的填充,以密集打包数据块。然后数据加密运回,再用强制解密的方法(阈值、延迟、见证)。
请注意,在这两种情况下,输出都应该是固定大小的,所以可以留下少量的填充。
事务包选择:同态和分离状态访问列表
假设我们解决了上述所有问题,那么块生产者就可以根据大小最优地将所有内容打包到一个块中。但我们还有另一个问题:——区块的生产者是否能经济最优地包装一切?我们希望在不丢弃价值的情况下集中构建模块。否则,它无法与中央集权的实体竞争。
解决方案1-FHEEVM
直接回答:完全在FHE经营EVM。这将允许分散建造最好的砌块,并为砌块生产商获得最大价值。他们选择并排列最大化价值的交易。
可惜,这不是一件简单的事情。FHE电路最大的成本是它的“深度”(即最长路径中的门数)。尤其是它的乘法深度非常重要。比如上面说的删除填充的事务“剪辑”就是一个相当“浅”的电路(也就是说非常简单)。有了硬件加速,这样的用例可能在2-3年内实现计算上的可行性。
然而,使用FHE来运行整个EVM需要非常深和复杂的电路。我们终于开始在zkEVM赛道上取得一些有意义的进展(这比运行标准EVM赛道要密集几个数量级),但zkEVM距离我们更远。
再次注意,使用可信硬件来模拟这个功能也是可行的(例如,SUAVE中的SGX就是这么做的)。
解决方案2-状态访问列表
或者,我们可以更严格地使用FHE和访问列表。实现——比运行一个完整的FHE EVM更容易。这是一条较浅的赛道。在该设置中,交易包可以包括加密的状态访问列表及其出价。这确切地指定了他们的包将访问状态的哪一部分。
现在,块生产者的同态电路只需要为具有不相交访问列表的事务包选择最高出价。
请注意,这不是严格意义上的最佳选择。例如,块中的第二高出价(T 2)可能达到与最高出价(T 1)相同的状态。在这个访问列表示例中,块生成器将丢弃第二个事务。但是,有可能T 1和T 2都有效。在这种情况下,FHE EVM(或今天的集中区块生产)将获得更多的价值。
它并不完美,但从我们今天的情况来看,这条捷径应该足够接近最佳。大多数mev仍然使用不相交的访问列表,因为像上面这样的冲突例子非常少见。
6. 时间戳 - 同态
您甚至可以通过允许验证者进行“虚拟”事务来隐藏事务的泄漏,因此内存池总是被填满。验证者还需要一个标记来证明他们是被允许创建这些虚拟交易的验证者。当“真实”事务达到峰值时,验证器将广播较少的虚拟事务。当真实事务下降时,验证者将发出更多的虚拟事务。
假设一切都被FHE加密,你将能够检测到相应交易中添加的“虚拟标识”。打包实际块时,可以忽略这些事务。
状态差异 - FHE EVM
背景概述:ZK汇总的一个优点是,他们不需要在链上发布完整的交易数据。他们公布状态更新之间的“状态差异”就足够了。相反,最佳汇总必须在链上发布完整的数据,以防止欺诈证书的仲裁。这种较低的数据要求节省了ZK汇总的成本,因为它们在数据可用性层消耗的资源较少。
在我们的对话中提到这一点——理想情况下,您不想因为加密内存池而失去这一优势。您希望获得一个加密的内存池,同时仍然保留ZK汇总仅发布状态差异的能力。答案在这里,——FHE zkEVM。这听起来很酷,但你可能要等很长时间。
一个缺点是单独发布状态差异可能会降低Rollup完整节点的响应速度。例如,在纯fork选择规则汇总中,一旦数据可用性层完成并且有效性得到保证,完整的节点就可以完成它们的汇总视图。如果只发布状态差异(而不是完整的事务数据),即使是完整的节点也需要提交ZK证书来确认它们对汇总的看法。就目前的情况来看,——这些证书的生成还需要一段时间,但是可扩展数据可用性层预计很快就会变得非常便宜。
结论
加密内存池是一个迷人且有前途的设计空间,但是仍然有一些实际的挑战。例如,你可以将一些问题转移到堆栈中的其他位置。钱包可以在源头审查你,以防止交易加密/路由,它们可以在你的交易之前/之后提交有效载荷来运行(或出售权利),等等。一个可能的答案是,用户在本地创建交易,而不依赖服务提供商。
关键是,这里没有灵丹妙药,但如果设计得当,它们可能是解决方案的重要组成部分,可以通过不同的功能和信任假设来改善当前的状况。