IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 深入浅出以太坊MEV -> 正文阅读

[区块链]深入浅出以太坊MEV

什么是 Front-running

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

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

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

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

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

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

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

部署蜜罐合约认识抢跑

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

图片

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

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

图片

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

图片

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

  • 0x15becbfbd33237bb28c8925870bedbf8b80cbe9967e89ea72239d418e931d5c7(失败,122.425344303?Gwei)

  • 0x5169bccd1893130995ebc25fa374366284b723ded44f379d0977af3f144d1a8f(成功,122.425344305 Gwei)

  • 0x2f5e7b565e8280826af0a9f492d53fac1b690848df39b98b22f614143d633a4d(失败,43 Gwei)

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

图片

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

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

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

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

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

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

图片

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

图片

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

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

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

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

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

从 Front-running 到 MEV

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

MEV 主要有两种形式:

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

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

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

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

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

下图为 flashbot 的架构图:

图片

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

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

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

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

其实本质上就是在以太坊用户和矿工之间构建一条有序的通道,通过自建交易暗池来绕开mempool机制,这样做可以使得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

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 21:45:36  更:2021-11-14 21:46:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 19:31:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计