Foresight News

Posted on May 19, 2023Read on Mirror.xyz

澳门大学王也:公共区块链中的分配效率低下、MEV 和私人交易

私人交易既不能够完全消除被攻击的风险,也不能够降低市场费用。

演讲:王也,澳门大学信息与计算科学系助理教授 编译:aididiaojp.eth,Foresight News

*本文为 Web3 青年学者计划中澳门大学信息与计算科学系助理教授王也视频分享的文字整理。*Web3 青年学者计划由 DRK Lab 联合 imToken 和 Crytape 共同发起,会邀请加密领域中知名的青年学者面向华语社区分享一些最新的研究成果。

开始之前我简单的做一下自我介绍,我是王也,目前在澳门大学的信息与计算科学系担任助理教授,目前主要的研究集中在 DeFi 及其相关的领域。我们将 DeFi 当做一个新兴的金融市场,并以经济学和金融学的角度去研究问题,包括分析用户行为和市场结构。此外,我还会关注在用户使用过程中存在的潜在安全性问题,以及如何通过提高用户体验来降低 Web3、DeFi 相关的应用可能带来的一些使用上的危险和安全性问题。今天我分享的内容主要是第一个研究方向相关,就是我们会去研究在这样一个新兴的去中心化金融市场当中,新模式下存在的一些用户行为问题,以及我们该如何去优化这样的市场结构。

这样一种建立在区块链系统上的金融市场会存在一些内生性的问题,目前市场上一些普遍的解决方案,以及这些解决方案对于整个市场的影响是我们所不知道的。那么接下来我们将会介绍在了解到现在存在的问题之后,我们是如何从经济学或者说金融学的角度对现在区块链市场上的问题进行建立模型,以及如何利用模型来进行理论分析。最后一部分我们将理论研究结果和在区块链市场上观测的实验数据来进行对比和分析,进而证明了我们理论推导在实际市场当中应用。

大家都知道在区块链当中存在两种不同的参与者:一种是普通用户,他们所做的行为就是将自己的交易发送到整个区块链的网络当中,然后期待他们的交易能够在网系统当中被运行。另外一种一般大家会叫它矿工,或者说现在新的系统中可能叫做验证者,他们会将这些用户发送在网络当中的交易进行收集,并且形成一个区块。当这样的一个区块被广播,并且被绝大部分的系统参与者验证之后,我们就认为这个区块内的所有交易都被确认,或者说完全被验证成功了。在这个里面我们会发现存在几个核心的问题是和传统金融市场有非常大的差异的。第一个存在的问题是在被确定运行和执行之前,交易是公开透明的。大概在前两年,大家就广泛提出了关于 Frontrunning 的概念,其实这件事情并不是只有在去中心化金融的语境下才存在,在传统金融中也一直存在,只不过说传统金融可以用一些政策或者说规章制度将风险完全排除,但是在区块链系统当中,我们就不得不重视到这个问题。

当交易被广播到公共网络,且还没有被执行之前,其实已经是可以被所有人观测到了,这就涉及到相当严重的风险暴露问题。其次第二个非常关键是关于交易排序的问题,目前最常见的矿工将所有的交易进行打包排序的方式,还是依照着手续费高低来依次来进行打包。那么这就会带来非常严重的目前大家越来越去关注在去中心化金融市场当中不可被忽略的相关问题,也就是会有大量的 Running Attack,或者说目前很多时候大家可能就把它统称为 MEV,Running Attack 可能只是 MEV 其中的一部分。

我们再简单的描述一下这个的过程,当我们发现一笔交易的时候,它其实是没有被执行的。我们任何一个攻击者都可以利用已知信息来去创建一笔新的交易,并且提供一个更高的 Gas 费来让自己新提交的这笔交易在已遭泄露的交易之前被执行。这是由于区块链体系存在的内生性问题,目前来看是至少在公共区块链系当中是始终存在,并且难以禁止的。接下来我们来一起回顾几种最常见的 Frontrunning 的攻击模式。

第一种攻击模式,相信很多朋友可能都比较熟悉了,那我们这里再给一个更加明确的介绍,这种模式叫做三明治攻击 Sandwich Attack,它的核心观点是通过 AMM 本身存在常数乘积做市商定价机制,在一笔交易完成之前通过另外一笔提前交易,将市场的交易费率进行改变,那么在受害交易者进一步把交易费推向更加极端的结果之后,再通过反向交易把从交易获取到的资金以一个更加优惠的价格进行兑换,并通过交易所蕴含的汇率差来获取利益。在这样的攻击模式当中,我们可以看到当市场上出现一笔受害者交易时,那么这笔交易通常来说是 AMM 当中的一笔交易,攻击者会在受害者交易之前用一笔更高的 Gas 费进行抢跑交易,在这笔交易结束后,他们会再使用另外一笔交易来进行一个反向操作,通过前后交易的汇率差获得利益。这就是我们说的第一种 Frontrunning。

第二种类型是比较常见的 Suppression Attack。在金融市场当中,时间是一个很重要的因素,很多交易晚执行一个区块和早执行一个区块会造成巨大的市场波动,尤其是当我们考虑到一些交易可能涉及到清算价格的时候,这类攻击的主要目标是这种临界交易。例如我们希望交易能够在下一个区块中被运行的,如果一个恶意的攻击者观测到这个交易后,然后用提出更高 Gas 费的交易把这个交易请求踢出特定的区块当中,那么被攻击交易就可能等到下一个或者下几个区块才被运行。因为时间差我们可能没有办法及时完成临界交易的市场操作,从而导致比较严重的市场动荡。

第三种攻击被称为 Displayment Attack,属于一次性的套利攻击。大家可以想象当我们在做一些循环交易的时候,其实市场价格可能是不同的。但汇率差带来的潜在投机机会是一次性的,如果我通过反复交易可以把市场的汇率差磨平,那么后续的攻击者就没有办法再进行投机来获利,那么这针对的就是这种类型的一次性套利机会。我们假设 Tv 是一条通过市场交易来获取利润的交易,恶意攻击者观察到 Tv 之后,就可以进行做一模一样的市场交易行为,只不过它唯一不同的是它会把自己的这笔套利交易用一个更高的 Gas 费进行提交。那么它在真实的区块链系统当中会被提前运行的,由于他把一次性的套利机会率先运行,TV 本身的这笔交易就不再获得收益。

这三种就是目前我们主要关注的 MEV 攻击。区块链网络由于系统机制设定的原因,存在一些内生性的问题。当我们说 Frontrunning 很普遍时,接下来自然而然的问题就是这件事情是不是真的是一个很严重的事情,MEV 到底会产生多大价值损失?

我们有过一个统计数据,大概在不到一年的时间,MEV 攻击在市场中造成的金融损失已经超过了 8 万枚以太坊,也就是说造成了相当多的经济损失,这也是为什么大家会去关注这个问题,很多人也再考虑如何消除 MEV 攻击。除了关注经济损失之外,我们其实还会思考整个事件对于区块链网络的进一步影响,因为它不仅仅造成了经济损失,同时也浪费了一定的区块空间。

当这个问题存在的时候,大家肯定是不断考虑怎么去解决这个问题。现在的解决方案是通过 Private Poool 进行广播,这种方式曾经也叫作 Relay Service。交易并不仅仅只能通过用户公开的分布式网络传播,他们提供了一个私有的通信渠道,能够让用户和矿工之间有一个直接连接的信息渠道。通过这样的通信渠道,大家可以想象好处是我们不再会有信息的泄露。我们既然认为 Frontrunning 也是 MEV 的一部分,这种 Private Pool 被引入到网络中就是希望能够尽量减少 Frontrunning 的出现。

目前区块链系统当中由于信息泄露导致了 Frontrunning Attack。我们也知道有一些人提出了一些新的机制来想要避免这种情况的出现。那么新的机制到底能不能起到作用,会对区块链系统有什么样的影响,自然而然就成为我们想要去研究的问题。

当我们把 Private Channel 引入到区块链之后,对于整个生态系统会有怎样的影响?首先第一点,它是不是会被用户和区块验证者广泛地接受?因为他们俩是我们整个系统当中核心的参与者。然后第二个问题是被接收之后,它是不是达到了我们想要的目标,就是能够降低交易手续费和避免 Frontrunning。第三点是在新机制被引入之后,到底会对整个系统当中所有的用户产生什么样的影响?这就是我们在发现可能的解决思路之后提出的三个的研究问题。

我们通过建立模型来研究和解释不同的参与者做出不同的选择后对市场可能存在的影响,最后进行预测,然后我们再对市场本身的用户行为和我们的理论分析结果来进行对比分析。那我们在这里将展现如何把问题分成三个阶段完成的。我们在三个阶段的模型中涉及到了三种不同的假设。第一种就是我们认为参与者是理性的,这是我们在做很多经济和金融研究当中常见的一个假设。其次我们会认为有一些交易会面临着被攻击的风险,同时还会存在一些系统当中始终不会被攻击的交易,同时我们将在根据这个市场当中存在的套利者或攻击者建立模型。

在整个体系当中,我们认为所有交易具有两个不同的交易渠道,一个就是我们常见的公共的分布式网络 Public Pool,另外就是私人网络 Private Pool。最后我们假设每个区块它有足够大的空间来容纳交易。接下来在这个模型的不同步骤当中,每一个用户和每一个验证者要选择其中一种网络进行交易。首先第一个做选择就是验证者,其次是用户,最后是攻击者,这其实也是符合我们在区块系统当中正常的运行模式。当这三个不同的参与者做出选择之后,我们再进行反向的计算整个市场最终会进入一个什么样的状态。

首先第一个矿工他们是有两种把不同的选择,第一种他们并不考虑加入到 Flashbots 系统当中,第二种选择就是加入其中。很显然他们这两种选择始终存在,如果停留在公开渠道时,他们只能看到 Public Mempool 里面所存在的交易。但如果加入了 Private Pool,他们能够看到不仅是 Mempool 的交易,同时他们也能看到 Private Pool 里面的交易。在模型的第一阶段,大家会去做选择,然后我们用 alpha 来表示选择使用了 flashbox 的比例。

第二部分就是关于用户在整个交易当中的选择。他们到底是会选择在 Mempool 当中提出自己的交易,还是会选择在 Private Pool 里面提出?如果他们在 Mempool 里面提出交易的话,那么他们就会面临被攻击的风险。他们也可以选择 Private Pool,但也会存在一定的风险。这个风险主要来源是说这些加入了 Private Pool 的交易可能并不会百分百会赢得下一个区块记录的权利,但是我们可以在后面继续提出交易。

第三阶段是攻击者会去观测可攻击的交易,并进行攻击交易。例如攻击者观察到了交易 P,并决定对这笔公共交易进行攻击。攻击者在提交自己的交易时,也同时面临两种选择,既可以在 Public Pool 进行,也可以在 Flashbox 提出。攻击者如果在 Public Pool 提交交易时,攻击者可能会多轮投标更高的竞价,那么他们交易的 Gas 会逐渐升高,这是很多目前常见的一种攻击模式。如果是在 Private Pool 当中,攻击者不知道是否有别的攻击者跟他们同时竞争。如果在 Public Pool 当中,如果有别人跟竞争攻击的话,其实攻击者是能够相互知道的。但在 Private Pool 里面,其实第一攻击者不知道有没有人竞争,其次我也不知道竞争者到底付了多少的 Gas 费,那么攻击者之间变成了一个新的竞争关系,这就会导致他们需要进行权衡。他们愿意支付的 Gas 费其实是会非常的不一样。如果攻击者的交易最终被接纳的话,他们最终就会有一个 Profit C,C 也是造成的经济损失。

接下来就是需要权衡的时候了。首先是关于用户和攻击者,他们遇到的主要权衡其实就是运行风险。

用户需要权衡我的交易信息会不会被泄露或者说我是否是安全的,攻击者也不会把自己的交易信息给另外一个攻击者。他们也面临着同样的运行风险就是 Private Pool 合作的验证者并不是有百分百记录下一个区块的权利,那么就有很大的概率这笔交易是不会包含在下一个区块当中,就算交了足够多的 Gas 费也没用。

没有加入 Flashbots 的用户,他们只需要把这些交易按照 Gas 费从高到低排序就好,但如果加入 Flashbots 的话,首先他们要在区块当中这些 Private Pool 提出的交易排在前面,然后才是验证剩下的交易。比如说交易 K 比它前后交易的 Gas 费都小,但是交易 K 还是放在前面进行验证。

假设模型的目录建立之后,我们从三个角度逐步分析大家会去做什么样的选择。我们首先是从攻击者的角度进行行为分析。攻击者在通过不断竞争之后,自然而然会面临越来越高的 Gas 费情况,这是我们会发现的一个核心结论就是他们在 Private Pool 里需要提交的 Gas 价格远高于他们 Public Pool 需要提交的 Gas 价格。但是他们还是会有很多人去选择 Private Pool,其中有两个核心的原因,第一个原因是他们在 Private Pool 里面提交的套利交易不会被其他的攻击者看到,他们也就不需要进行竞价,这是一个好处。第二个好处,其实就是在于区块的排序顺序,一个它是通过 Private Pool 来提交的话,它自然而然优先级是高于那些 Public Pool 提出的交易。在这种情况之下,攻击者自然会选择 Private Pool.同时他们为了确保避免运行风险带来的影响,他们也会选择同时在一些 Public Pool 交易。

接下来就是关于用户的权衡,他们主要会考虑两个因素,一个是采用率,另外一个就是潜在被攻击的概率。如果 a 比较大的话,那么其实大家可以想象他们面临的运行风险就比较小,那他们自然而然就会更倾向于去使用 Private Pool。如果 alpha 很小的话,对他们来说,提交过去也不一定有什么作用,所以 Public Pool 就会变成他们的选择。

同样对于 c 部分,其实也是一个非常重要的因素。我们发现如果 C 足够大的话,他们其实是没有任何别的选择,只会选择在 Private Pool 中提出交易。如果这种情况出现之后,我们可以发现。其实就是攻击者套利机会完全被消除了,如果大家都不去使用 Public Pool,那么这件事完全就不会再存在。但是我们也不得不去考虑一点,事实上,在实际的运行当中,不是每一笔造成 MEV 的交易都有那么高的套利空间。

我们现在可以看到的是说很多可以被三明治攻击的交易,可能他们只有几美元的回报。攻击者在完成攻击之后,有时甚至还要分大部分利润给矿工,最后剩下来的激励可能只有不到 1 美元。其实是存在很多 C 很小的情况,在这种情况下,其实他们就不会选择 Private Channel,因为对于他们来说,Private Channel 不是一个最优的选择。核心原因是对于很多用户来说,他们不在乎自己的交易是否被攻击,他们愿意承担被攻击的风险,他们觉得运行风险对于他们来说是一个更加不好的事情。在这种情况之下,我们知道 adoption rate 如果不是百分百,那么就一定会有很多交易被攻击。

接下来要回答第二个问题,优先费用有没有被降低?我们最终的结论是就算我们引入 Private Pool 之后,优先费用也不会降低。这里存在两个主要因素,第一部分因素,其实大家可以想象到,验证者只有在获得更高的费用时,才会选择采用 Private Pool,那么自然而然这就抬高了进入区块的基准费。另外一个因素是有一些人可能原本是容易被攻击,所以不愿意选择 Public Pool,这时候他们更愿意使用 Private Pool 来进行交易,这些原本不会在 Private Pool 中出现的交易会进一步的去抬高优先费用。最终的核心结论就是导致了优先费用的上升。

最后一个核心问题是我们关注的区块总体价值有没有增加?我们可以想一下这个核心因素在于因为 Private Channel 其实是不能实现百分百的采用率,所以就会导致还是存在很多 Frontrunning,它们会占据我们本身的区块空间。那么在引入之后,由于这些产生 MEV 的 Running Attack 其实是不给系统带来新的网络福利,他们通过获取被攻击的用户的一部分奖励成为自己的投机回报,他们是不会给这个系统带来一些新的价值,所以从这个角度上来说,我们就算有了 Private Pool 之后,其实我们还是不能够达到网络的最佳有效分配状态。同时由于 MEV 的存在,在整个系统当中,其实并不是网络总体福利越高,对于验证者就是一个最有利的选择。在这种情况之下,矿工的选择也会导致我们最终系统的网络福利是没有办法达到一个最优解。

接下来我们会去进一步去讨论是不是存在一些潜在的方法去来帮助我们解决这样的问题。最核心的论点是攻击者的投机回报和网络最佳资源配置其实是不相容的。攻击者需要 MEV 的产生,帮助他们来提高自己的收益率。那么其实可能存在的一种方法就是去改变这种网络价值分布不均的情况,也就是说为攻击者提供一个激励方式,让他们进行一个更加合理,更加有效的网络参与方式。

最后想和大家简单分享一些我们在进行理论分析之后得到的数据。首先第一个我们其实是看 Flashbots 的接收率,我们主要做的是看结交区块是不是被这部分数据很直观地体现,那我们发现其实交易始终目前还是处于一个这样的状态,既不是所有人都没有看到,也不是说所有人都能看到,这是我们得到的第一个结论。第二个我们得到结论是用户选择 Private Pool 的概率其实是和他们是不是容易被攻击有一个非常明显的正相关关系。

第三部分我们得到了一个与时间有关的结论,我们发现比起在 Mempool 里面的攻击者,在 Private Pool 里面的攻击者不需要一轮一轮地竞价,获取 MEV 的攻击者,他们要提交给矿工的费用高很多。在 Public Pool 中,平均支付比率在 0.3 左右,但在 Flashbox 中的话,已经上升到接近 0.8 的状态。我们发现这个选择 Private Pool 的概率,其实是跟他们被被攻击的风险呈正相关关系。这张图就是大家可能看到这样的一个概率分布,然后我们发现当被攻击的概率每增加了 1%,那么他们会选择 Private Pool 的偏好就会提高 0.6%。

我们第一个最核心的结论就是说它 Private Pool 既不能够完全消除被攻击的风险,也不能够降低市场费用。其次我们发现 Private Pool 引入会提高验证者的福利,降低攻击者的福利,网络总体福利会由于更有效的区块空间分配变得更高,但无法达到最优状态。