深入浅出以太坊MEV

这篇具有很好参考价值的文章主要介绍了深入浅出以太坊MEV。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是 Front-running

要介绍MEV,就绕不开Front-running(直译为抢跑),也称为Priority Gas Auctions (PGAs),实际上是一个意思。

我们都知道,常规意义上,在以太坊上提交交易是一个看似有序的过程,现在重新审视一下这个过程:

  • 用户需要在钱包构建交易,并签名,钱包后端会将该交易广播到 P2P 网络;

  • 该交易首先会进入各个节点的 mempool,按照一定的顺序排列;

  • 矿工从 mempool 中选取合适的交易进行打包,挖矿出块,该交易就成功上链了。

然而事实并非如此,和看似有序的交易打包过程相比,以太坊更像一个 黑暗森林 [1]。

由于每个以太坊全节点均会维护一个 mempool,上面的未打包交易是清晰可见的。有这么一群人,这群人会不分昼夜地审视 mempool 中未打包的交易,通过某些技术手段判断这些交易执行是否是有利可图的,并利用较高的 gasPrice 抢先执行交易。举个最直接的例子,当这些人发现某鲸鱼地址提交了在 Uniswap 大量买入某数字货币的交易,他们会利用更高 gasPrice 发布一个买入交易。通常情况下,矿工会优先打包 price 更高的交易,将抢跑者的交易插入到鲸鱼交易的前面,这样鲸鱼地址的买入就为抢跑者”抬了轿子“,通过这种方式获得利润。

部署蜜罐合约认识抢跑

我们引用之前其他人做过的实验,通过部署一个蜜罐合约来研究抢跑行为。部署蜜罐合约如下,用户必须调用合约中的 take 方法,并正确提交 secret 才能拿走合约中的 ETH:

深入浅出以太坊MEV

当发起交易的时候,该交易会首先提交到 mempool 中,抢跑者会不断读取 mempool 中的交易。并且对这些交易模拟执行,当发现有利可图时,比如执行完之后发现可以获取到一定数量的 ETH 或者 ERC-20 代币,则将该交易进行抢跑。

可以看到,在发起的第一笔正常交易时,指定了 33 gwei 的 gasPrice:

深入浅出以太坊MEV

该交易调用了蜜罐合约的 take 方法,但是交易执行完之后,却没有收到 ETH奖励。而查看合约的 event 之后,我们发现不止有一个和该蜜罐合约进行了交互,并且紧跟在初始交易的后面发生:

深入浅出以太坊MEV

除了 0xe0c3dc 交易,其他的交易都是抢跑者发起的交易,其中只有一笔交易成功提走了合约的奖励 ETH。

  • 0x15becbfbd33237bb28c8925870bedbf8b80cbe9967e89ea72239d418e931d5c7(失败,122.425344303 Gwei)

  • 0x5169bccd1893130995ebc25fa374366284b723ded44f379d0977af3f144d1a8f(成功,122.425344305 Gwei)

  • 0x2f5e7b565e8280826af0a9f492d53fac1b690848df39b98b22f614143d633a4d(失败,43 Gwei)

可以看到,最终 gasPrice 最高的交易成功提走了蜜罐合约的奖励,哪怕只比别人高了0.000000002 gwei:

深入浅出以太坊MEV

那么问题来了,蜜罐合约并没有发布源码,这些抢跑者是如何在如此短的时间内判定该交易值得被顶替呢?或者说如何判定该交易是有价值的?这里就涉及到交易模拟执行技术。

抢跑关键技术:交易模拟执行

抢跑机器人如何判断某个在 mempool 的交易是否是有利可图的呢?这里需要介绍交易模拟技术。

交易模拟执行本质上是给定交易的输入、给定需要模拟的状态树,通过这两个数据,由 EVM 模拟执行一次并输出 trace 结果。

实现起来其实并不难,如果我们维护一个 archive 节点或者 trace 节点,RPC中会有 trace_call 这个 endpoint,通过 tace_call 我们可以实现交易的模拟执行,可以看到交易中的内部交易、状态变化等。

比如我们需要模拟执行交易:0x5169bccd1893130995ebc25fa374366284b723ded44f379d0977af3f144d1a8f,并且需要在历史状态上执行,我们则需要首先维护一个 parity 的 archive 节点(archive 节点会保存全部的历史状态),并且执行以下命令:

深入浅出以太坊MEV

市面上甚至有一些商业产品专门提供模拟执行功能,如 blocknative [2]、tenderly 等,其本质就是在 trace_call 的基础上包装一层前端,获得更好的用户体验:

深入浅出以太坊MEV

基于交易模拟执行,抢跑者会按照下面的步骤判断是否抢跑:

  • 会持续监控 mempool 中的各种交易,甚至是其他抢跑者的交易

  • 将这些交易进行 EVM 模拟执行,获取模拟执行结果

  • 一旦发现这些未提交到区块的交易有利可图,则发起新的交易设置更高的 gasPrice 顶掉 mempool 中的交易

实际上,交易模拟执行技术用途非常广泛,远不止仅做抢跑前的准备,对于高频交易、模拟交易评估、判断蜜罐合约、研究黑盒交易等作用。

从 Front-running 到 MEV

抢跑本质上是通过交易顺序的排列来获取额外的利润。实际上,对于矿工来说,完全可以自己当抢跑者,因为矿工完全有能力重新组织交易顺序。这样一来,矿工除了传统意义上的出块奖励、交易手续费,还多了一些额外收益,这些收益就叫做 MEV(Miner extractable value),称为矿工可提取价值。

MEV 主要有两种形式:

  • Frontrunning:致力于将交易插入到某些交易的前面执行,比如针对鲸鱼交易的套利行为,或者抢先执行一些套利者的交易。

  • Backrunning:致力于将交易插入到某些交易的后面执行,比如针对抢 Defi 清算,将清算交易插入到 oracle 更新之后来抢清算。

可以预见的是,随着以太坊使用量的激增,MEV 最终造成以太坊共识机制的不稳定。

正常情况下,以太坊提供了交易 gas 竞价模式,出价高的会被矿工优先打包,如果矿工从某些利益出发去排列交易,实际上会造成一种混乱的局面,引发 P2P 网络拥堵或者区块空间的拥堵。

对于MEV缓解措施,业内涌现了诸如 flashbots 和 EDEN 等技术方案,

下图为 flashbot 的架构图:

深入浅出以太坊MEV

Flashbots生态中由三个角色组成:

  • searcher:交易发起者,可以是普通用户、也可能是套利机器人等对暗池交易有需求的以太坊用户

  • relayer:转发者,监控自己的mempool,将用户发起的交易bundle模拟执行,确认无误后,直接转发给矿工

  • miner:矿工,接受relayer bundle交易,并直接将其打包到区块中

其实本质上就是在以太坊用户和矿工之间构建一条有序的通道,通过自建交易暗池来绕开mempool机制,这样做可以使得MEV更加透明、有序,从而保护以太坊的相关机制。

深入浅出以太坊MEV

etherscan上标注flashbots的暗池交易

此外,flashbots中有很多有趣的技术,比如可以使批量交易原子化,再比如除了传统的gasPrice拍卖入块机制,用户甚至可以配置在交易满足某些条件的情况下直接给矿工打款,从而避免交易revert造成的gas损耗。

NOTICE:如果对flashbots技术感兴趣,笔者强烈建议精读[3]和[4],后续会出系列文章解读flashbots。

总结

引用 ”Ethereum is a Dark Forest“ [1] 中作者的一句话:

It’s no secret that the Ethereum blockchain is a highly adversarial environment.

随着 Defi 的兴起,以太坊上每一个新交易的产生、每一个合约的部署都蕴含着大量的价值,因此有无数”猎人“ 虎视眈眈,他们有着强大的毅力和时间攫取每一份能攫取的利润。

然而,加密货币领域永远不乏激动人心的创新者,随着 MEV 赛道的日渐有序化和成熟,相信黑暗森林最终会往透明化、有序化方向发展。

参考

[1]https://medium.com/@danrobinson/ethereum-is-a-dark-forest-ecc5f0505dff

[2] https://www.blocknative.com/blog/what-is-simulation

[3]https://github.com/flashbots/mev-research/blob/main/resources.md

[4] https://arxiv.org/abs/1904.05234文章来源地址https://www.toymoban.com/news/detail-490276.html

到了这里,关于深入浅出以太坊MEV的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入浅出IAM(1)

    在本人即将入职的一份基础架构的工作前,我提前联系到了团队leader并跟他进行了一次1-1。谈话中提到了我可能会先上手的一个项目是IAM相关的实现,于是趁着入职前的间隙,我学习了部分优秀开源IAM项目实现思路以及腾讯云开发专家孔老师的专栏。 在反复思考和总结提炼后

    2024年02月05日
    浏览(46)
  • 机器学习深入浅出

    目录 机器学习基本概念 机器学习算法类型 机器学习的实现步骤 机器学习三个基本要素 机器学习相关应用 1.语音识别 2.图像识别 机器学习是一种人工智能的分支,它使用算法和数学模型来让计算机自主学习数据并做出预测和决策。这种技术正在被广泛应用于各种领域,包括

    2023年04月08日
    浏览(79)
  • 深度学习深入浅出

    目录 一 基本原理 二 深度学习的优点 三 深度学习的缺点 四 深度学习应用 手写数字识别 深度学习是机器学习的一个分支,其核心思想是利用深层神经网络对数据进行建模和学习,从而实现识别、分类、预测等任务。在过去几年中,深度学习技术取得了许多突破性的成果,如

    2023年04月09日
    浏览(57)
  • 深入浅出CenterFusion

    自动驾驶汽车的感知系统一般由多种传感器组成,如lidar、carmera、radar等等。除了特斯拉基于纯视觉方案来进行感知之外,大多数研究还是利用多种传感器融合来建立系统,其中lidar和camera的融合研究比较多。 CenterFusion这篇文章基于nuscenes数据集研究camera和radar的特征层融合,

    2024年02月09日
    浏览(49)
  • Llama深入浅出

    前方干货预警:这可能是你能够找到的 最容易懂 的 最具实操性 的 学习开源LLM模型源码 的教程。 本例从零开始基于transformers库 逐模块搭建和解读Llama模型源码 (中文可以翻译成羊驼)。 并且训练它来实现一个有趣的实例:两数之和。 输入输出类似如下: 输入:\\\"12345+54321=\\\"

    2024年02月09日
    浏览(61)
  • 随机森林算法深入浅出

    目录 一 随机森林算法的基本原理 二 随机森林算法的优点 1. 随机森林算法具有很高的准确性和鲁棒性 2. 随机森林算法可以有效地避免过拟合问题 3. 随机森林算法可以处理高维度数据 4. 随机森林算法可以评估特征的重要性 三 随机森林算法的缺点 1. 随机森林算法对于少量数

    2023年04月08日
    浏览(56)
  • 深入浅出理解HTTPS

    1.对称密钥(Symmetric Encryption) 对称密钥加密算法使用相同的 密钥(Symmetric key) 来进行数据 加密(encryption) 和 解密(decryption) 加密和解密过程都使用相同的密钥,因此 加密速度较快 ,适用于大量数据的加密。 问题在于密钥的管理:在通信双方交流之前,需要确保安全地分

    2024年02月10日
    浏览(57)
  • 深入浅出Spring AOP

    第1章:引言 大家好,我是小黑,咱们今天要聊的是Java中Spring框架的AOP(面向切面编程)。对于程序员来说,理解AOP对于掌握Spring框架来说是超级关键的。它像是魔法一样,能让咱们在不改变原有代码的情况下,给程序增加各种功能。 AOP不仅仅是一个编程范式,它更是一种思

    2024年01月20日
    浏览(60)
  • 【C++深入浅出】模版初识

    目录 一. 前言 二. 泛型编程 三. 函数模版  3.1 函数模版的概念 3.2 函数模版的格式 3.3 函数模版的原理 3.4 函数模板的实例化 3.5 模板参数的匹配原则 四. 类模版 4.1 类模版的定义 4.2 类模版的实例化         本期我们要介绍的是C++的又一大重要功能---- 模版 。通过模版,我们

    2024年02月08日
    浏览(60)
  • 深入浅出C++ ——线程库

      在C++11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口,这使得代码的可移植性比较差。C++11中最重要的特性就是对线程进行支持了,使得C++在并行编程时不需要依赖第三方库,而且在原子操作中还引入了 原子类 的概念。要使用标准库中

    2024年02月03日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包