| |
|
开发:
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),实际上是一个意思。 我们都知道,常规意义上,在以太坊上提交交易是一个看似有序的过程,现在重新审视一下这个过程:
然而事实并非如此,和看似有序的交易打包过程相比,以太坊更像一个?黑暗森林?[1]。 由于每个以太坊全节点均会维护一个 mempool,上面的未打包交易是清晰可见的。有这么一群人,这群人会不分昼夜地审视 mempool 中未打包的交易,通过某些技术手段判断这些交易执行是否是有利可图的,并利用较高的 gasPrice 抢先执行交易。举个最直接的例子,当这些人发现某鲸鱼地址提交了在 Uniswap 大量买入某数字货币的交易,他们会利用更高 gasPrice 发布一个买入交易。通常情况下,矿工会优先打包 price 更高的交易,将抢跑者的交易插入到鲸鱼交易的前面,这样鲸鱼地址的买入就为抢跑者”抬了轿子“,通过这种方式获得利润。 部署蜜罐合约认识抢跑我们引用之前其他人做过的实验,通过部署一个蜜罐合约来研究抢跑行为。部署蜜罐合约如下,用户必须调用合约中的 take 方法,并正确提交 secret 才能拿走合约中的 ETH: 当发起交易的时候,该交易会首先提交到 mempool 中,抢跑者会不断读取 mempool 中的交易。并且对这些交易模拟执行,当发现有利可图时,比如执行完之后发现可以获取到一定数量的 ETH 或者 ERC-20 代币,则将该交易进行抢跑。 可以看到,在发起的第一笔正常交易时,指定了 33 gwei 的 gasPrice: 该交易调用了蜜罐合约的 take 方法,但是交易执行完之后,却没有收到 ETH奖励。而查看合约的 event 之后,我们发现不止有一个和该蜜罐合约进行了交互,并且紧跟在初始交易的后面发生: 除了 0xe0c3dc 交易,其他的交易都是抢跑者发起的交易,其中只有一笔交易成功提走了合约的奖励 ETH。
可以看到,最终 gasPrice 最高的交易成功提走了蜜罐合约的奖励,哪怕只比别人高了0.000000002 gwei: 那么问题来了,蜜罐合约并没有发布源码,这些抢跑者是如何在如此短的时间内判定该交易值得被顶替呢?或者说如何判定该交易是有价值的?这里就涉及到交易模拟执行技术。 抢跑关键技术:交易模拟执行抢跑机器人如何判断某个在 mempool 的交易是否是有利可图的呢?这里需要介绍交易模拟技术。 交易模拟执行本质上是给定交易的输入、给定需要模拟的状态树,通过这两个数据,由 EVM 模拟执行一次并输出 trace 结果。 实现起来其实并不难,如果我们维护一个 archive 节点或者 trace 节点,RPC中会有 trace_call 这个 endpoint,通过 tace_call 我们可以实现交易的模拟执行,可以看到交易中的内部交易、状态变化等。 比如我们需要模拟执行交易:0x5169bccd1893130995ebc25fa374366284b723ded44f379d0977af3f144d1a8f,并且需要在历史状态上执行,我们则需要首先维护一个 parity 的 archive 节点(archive 节点会保存全部的历史状态),并且执行以下命令: 市面上甚至有一些商业产品专门提供模拟执行功能,如 blocknative [2]、tenderly 等,其本质就是在 trace_call 的基础上包装一层前端,获得更好的用户体验: 基于交易模拟执行,抢跑者会按照下面的步骤判断是否抢跑:
实际上,交易模拟执行技术用途非常广泛,远不止仅做抢跑前的准备,对于高频交易、模拟交易评估、判断蜜罐合约、研究黑盒交易等作用。 从 Front-running 到 MEV抢跑本质上是通过交易顺序的排列来获取额外的利润。实际上,对于矿工来说,完全可以自己当抢跑者,因为矿工完全有能力重新组织交易顺序。这样一来,矿工除了传统意义上的出块奖励、交易手续费,还多了一些额外收益,这些收益就叫做 MEV(Miner extractable value),称为矿工可提取价值。 MEV 主要有两种形式:
可以预见的是,随着以太坊使用量的激增,MEV 最终造成以太坊共识机制的不稳定。 正常情况下,以太坊提供了交易 gas 竞价模式,出价高的会被矿工优先打包,如果矿工从某些利益出发去排列交易,实际上会造成一种混乱的局面,引发 P2P 网络拥堵或者区块空间的拥堵。 对于MEV缓解措施,业内涌现了诸如 flashbots 和 EDEN 等技术方案, 下图为 flashbot 的架构图: Flashbots生态中由三个角色组成:
其实本质上就是在以太坊用户和矿工之间构建一条有序的通道,通过自建交易暗池来绕开mempool机制,这样做可以使得MEV更加透明、有序,从而保护以太坊的相关机制。 etherscan上标注flashbots的暗池交易 此外,flashbots中有很多有趣的技术,比如可以使批量交易原子化,再比如除了传统的gasPrice拍卖入块机制,用户甚至可以配置在交易满足某些条件的情况下直接给矿工打款,从而避免交易revert造成的gas损耗。 NOTICE:如果对flashbots技术感兴趣,笔者强烈建议精读[3]和[4],后续会出系列文章解读flashbots。 总结引用 ”Ethereum is a Dark Forest“ [1] 中作者的一句话:
随着 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 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/25 22:43:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |