目前的 MEV-Geth 实现机制改变了原本网络中预期的交易排序规则,导致诸多细思极恐的公开公正性问题,并且可能已经对生态中的用户产生利益损害。
设想一种情形:用户在 AMM 类型的 DEX 上做交易,无论设置什么滑点,最终都会在你能接受的最差价格上成交。这可能是个对用户来说很可怕的场景。
目前的 MEV-Geth 实现机制改变了原本网络中预期的交易排序规则,导致诸多细思极恐的公开公正性问题,并且可能已经对生态中的用户产生利益损害。
当前以太坊网络中,如果用户通过原生的方式发送交易,这笔交易会在整个由以太坊全节点组成的点对点网络传播,并且交易的内容完全透明,这意味着任何网络中任一全节点能看到绝大部分交易的交易内容。
由此,以太坊网络中会出现几种破坏交易发送者预期和体验的情况(通常被认定为某种程度的 “攻击”),
发起攻击的对象是不确定的。理论上,所有知道了你的交易内容的人都有可能攻击你,dApp 项目方、专业攻击者、钱包、矿池,都有可能攻击你(没有“可追责性”)。
攻击的难易程度,与网络的共识规则和生态中普遍可用的基础设施有关(攻击难度、“可响应性”);例如,如果大家完全遵守当前的交易池规则,仅通过 Gas Price 竞争来影响出块者对交易的排序(要求出块矿池坚守行业自律),则三明治攻击是比较难发动。
目前,由于能够直接决定自己所打包区块中的交易的执行顺序,矿工-矿池 一直被当成是最有可能发动攻击的参与者,这也是 “MEV” (矿工因交易排序能力而获得的收益)这个概念的由来;但实际由于攻击机会具备一定时效性,可能转瞬即逝,攻击者和矿池更多表现为一种分成合作的关系。
这些背景,正是使我对 MEV-Geth 和其他形式的、矿池直接从事三明治攻击的现象感到不安的原因。
目前 MEV-Geth 实现(截至 2021-04-10)的功能仅为,搜索网络中 MEV 机会的搜索器(Inspect),转发原子交易包到注册矿池节点(Relay),出块节点允许插队(MEV-Geth client)。构建出仅在注册矿池和 Relay 服务器间的简单网络。
MEV-Geth 是一种特殊定制的以太坊节点客户端,运行在矿池方,允许通过该客户端存储 Relay 分发的 MEV Bundle,并将这些特殊的交易打包到区块中的队列头部位置。
使用者可使用 MEV-Geth 广播称为 Bundle 的交易包;一个 Bundle 内包含的信息有:一个交易列表(指明发送者希望上链的几笔连续交易),套利计算区块高度,最小最大超时时间。在单个 Bundle 上链的区块中,发送者会通过 coinbase 交易(而非通过 Gas Price),向出块者(即矿池)支付 ETH 作为分佣。
在当前的 MEV-Geth 实现中,每一个区块只能存在一笔 Bundle,因此出块者会会选出 coinbase 支付最大的一笔 Bundle 上链。
这个当前的实现简化了实施三明治夹击的难度。一方面,攻击者可以显式地声明夹击交易的前后关联;其次,夹击者没有了后顾之忧,即使在与其他夹击者的上链竞争中落败,其交易也只会在 MEV-Relay 网络中超时无效,不需要付出 Gas 费用。
根据 Flashbots 团队的公开声明,他们正在开发允许同一个区块包含多笔 Bundle的方案,或许我们很快会看到区块中充满大量零 Gas 费的三明治夹击。
根据目前的实现,MEV-Geth 交易最显著的特点就是前后两笔夹击交易的 Gas Price 都为 0。
打开区块浏览器网站 etherchain.org ,查看任一区块的交易列表(此列表就体现了区块内交易的执行顺序),如果在列表开头出现了三明治夹击,且夹击交易的 Gas Price 为 0,则这很有可能是通过 MEV-Geth 发起的 Bundle。
-12200018 高度区块的列表头部-
-某笔被夹击交易全过程-
当前 MEV 的情况可以通过对 0 gas price 并且 gas used 大于 21000 交易查询获得,具体见我临时建立的 dune dashboard
从图中可看到,不少矿池都已参与,每天有约超过 3500 笔 MEV 相关交易,大约一千多次 MEV 交易产生。按照平均出块时间在 12s 来算,每天有 7200 (60x60x24/12) 个区块,即每天有近 1/3 的区块中存在 MEV-Geth 交易。还有部分矿池未使用 MEV-Geth,套利者还未切换到这种新的竞争模式。
我们可以借助比较几种交易池运作情形,来了解用户得到了什么,又失去了什么。
如果网络回归到原生状态,而且出块者恪守行业自律,所有交易全公开,任何人都能通过建立节点或者通过节点服务发现未被打包的交易;那么,如果想夹击某笔交易,就需要发送两笔交易,并设置 gas price 为被攻击交易前后来保证夹击顺序,并且在有竞争的情况下还要发送多份拷贝交易提高成功率,最后在任意交易执行失败时要面临花出矿工费的惩罚。
从用户方来看,大家都处于平等公开的环境下,当看到自己交易被夹击或抢跑时,是有机会有方法加速或取消这笔交易来避免潜在损失的。
而且,最终成型的区块,不仅能显示出交易池竞争的胜者,还能真实地反映交易池竞争的实际情形。
此处的 “隐私交易” 指的是矿池开设专门的通道,由该通道进入矿池交易池的交易不对外广播,但仍根据 Gas Price 高价优先的形式排序并打包交易。
普通用户使用隐私交易服务时,其交易对外不公开,因此,除非矿池自身违反保密承诺或参与攻击,否则用户不会受到上述攻击。
再从另外一头考虑,如果攻击者通过隐私交易服务攻击公网可见交易,被攻击者无法发现事情即将发生,无法做出应对。但是,三明治夹击仍然受限于交易路由和交易池排序的随机性,无法轻易实施。
而且,当多人竞争同一个获利机会时,只要矿池不透露相互竞争的交易,他们便无法了解竞争对手出价,只能盲出价格进入排序队列,这变相提高攻击成本和难度。
此外,最终成型的区块,仍然能真实地反映出交易池竞争的全部情形,外部可以观测到成功失败及其原因。
MEV-Geth 出现后,套利者抢跑者会将可套利可夹击的交易提交到这个网络中竞价,筛选出上交矿池利益最大的 Bundle 会放到下一个打包的区块中优先执行,保证被打包交易能达到 100% 成功率。
在当前,如果你也部署了一个 MEV-Geth 节点,Bundle 内容对你来说是透明的,因此如果有人攻击你,你也能及时响应。
但如果你并不知道什么是 MEV-Geth,你的情形与有人动用隐私交易攻击你相同;变得更差的是,攻击者的确定性提升不少,并且攻击过程的竞价也无法得知,因为成型的区块将只暴露那笔胜出的交易,而不会暴露竞争的过程。
Flashbots 认为,这会给网络带来一些好处:套利者竞争博弈的过程被移到另外一个网络,可以缓解以太坊 P2P 网络的负担;只有胜出者占据区块空间,可以缓解区块拥堵。 在 subreddit/EtherMining 上有发布报告列出目前区块中的额外获利情况,但或许长期不一定能赶上矿工费下降带来的总收入减少,需要更多长期数据跟踪研究。
原本网络共识预期是,以太坊 Defi 用户和抢跑者处于同一规则下,并且竞争的过程和结果也是透明地暴露在区块中。随着矿池的介入,事情变得更加复杂,隐私交易和 MEV-Geth,都让网络底层开始明确介入上层业务。而 MEV-Geth 似乎用各种好处正当化了对用户的三明治夹击,并且让竞价过程在一个外部无法观测的网络中发生,网络运行过程变得变得不友好也不透明。
我这里有几个问题,
社区中也是有不少关于 MEV 或 MEV-Geth 实现的争议,不少声音是担心
如果以太坊想成为支撑整个世界的金融基础平台,那么维持用户资产安全以及交易排序的公平性(随机性)就非常重要。所有参与方都是按照矿工费竞价规则竞争打包队列位置,执行失败会失去支付的矿工费。矿池在打包过程中完全忽略交易内容,仅以矿工费高低来为交易排序,网络验证人和应用参与方隔离开来,互不干涉影响。
MEV-Geth 的全面部署以及矿工对以太坊网络的应用层逐步侵入,让我感觉到有些不对劲,周末两天思考和查阅材料,最后写下了这篇内容,希望能让更多人来思考这个可能会对以太坊影响深远的问题,也感谢这几天帮助校对内容的朋友们,特别感谢阿剑老师不断对阐述逻辑和顺序向我发问让文章内容更加完善与逻辑完备。
Flashbots 相关内容索引
(完)
作者: Kai
原文链接:https://ethfans.org/posts/a-wild-MEV-age-is-coming-how-to-keep-fair-and-transparency-of-mempool
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!