矿工如何通过轻微的调整使区块链对自己有利
最大可提取价值 (MEV)
MEV 是区块链世界中一个相对较新的概念,也是一个带有很多争议的概念。它指的是除了标准区块奖励之外,可以从区块生产中提取的最大价值。
以前,它曾被称为矿工可提取价值,因为矿工最适合从区块生产中提取价值,但随着我们走向权益证明,矿工被验证者取代,已做了一个更通用的重新命名,称为最大可提取价值。
什么是 MEV?
简而言之,这是一个通过在链上进行某些类型的交易来提取价值(利润)的概念,这些交易本身并不是区块奖励。最初,它开始发生是因为矿工可以控制他们想在一个区块中包括哪些交易,以及以何种顺序。由于在创建区块时,矿工可以按照自己的意愿包括、排除和改变区块的交易,这意味着他们可以将一些交易与其他交易相提并论,通过这样做获得一些额外的利润。请注意,我们现在谈论的是矿工,但在合并后事情会发生变化。
通常情况下,当某项交易必须包含在某个区块(通常是当前区块)中才能真正获利时,MEV 就会发生。此外,它有时也可能需要在区块中的特 定位置--例如,在合同部署后立即购买一个高度竞争的 NFT 下降,在合同部署的同一区块内,不像我们常人,至少要等到下一个区块,这样 Metamask 才会识别出合同已经部署,然后再发送交易出去,那时天然气价格可能已经大幅上涨。
MEV 提取
理论上,MEV 只能由矿工提取,在早期也是如此。由于矿工对区块生产有控制权,他们可以为自己保证执行有利可图的交易,如果交易没有被证明是有利可图的,就不将其纳入区块。然而,今天,MEV 的很大一部分是由被称为搜索者的独立网络参与者提取的。我们将了解更多关于他们的具体工作,但总的来说,他们运行复杂的算法来寻找在链上获利的机会,并有机器人自动提交这些交易给网络。
矿工仍然继续获得搜索者赚取的 MEV 利润的一部分,因为搜索者一般倾向于支付非常高的气体费用,试图确保他们的交易被包括在区块中。我们很快就会看一些例子。
🤔 是什么让 MEV 成为可能? 写得不好的智能合约 矿工可以选择将哪些交易以何种顺序纳入区块中 矿工可以假装用其他用户的密钥进行交易,从而窃取任何利润
搜索者
搜索者是正在寻找机会进行有利可图的交易的参与者。这些人一般都是普通用户,当然,他们会编码。矿工从这些搜索者那里得到好处,因为 "搜索者 "通常必须支付非常高的气体费用才能真正进行有利可图的交易,因为竞争非常激烈。我们研究的一个例子是我们的闪光贷款例子中的 DEX 套利。虽然套利可以手动完成,但你成功做到的机会微乎其微。搜索者运行机器人来检测链上的套利机会,并自动提交交易,从这种机会中获利。由于套利是 MEV 最常见的例子之一,搜索者通常最终将 90%的利润支付给矿工的瓦斯费,以被纳入区块中。
这导致了 Gas Golfing 领域研究的兴起--这是一个花哨的词,即对智能合约和执行进行微小的优化,以尽量减少气体成本,这使得搜索者可以提高他们的气体价格,同时降低气体费用,从而最终为气体支付相同数量的 ETH 总量。
搜索者
使用燃气高尔夫的概念,能够以这样的方式对交易进行编程,使其使用最少的燃气。这是因为有这样一个公式:燃气费=燃气价格*燃气使用量
。因此,如果你减少你的汽油使用量,你可以提高你的汽油价格以达到相同的汽油费。这有助于竞争性的 MEV 机会,因为能够支付比你的竞争对手更高的汽油费,意味着你的交易被纳入的机会更高。
我们在以前的一个级别中详细谈到了如何减少气体的使用。
前进路线
通常有两种类型的搜索者--那些寻找非常具体的 MEV 机会的搜索者,例如上面提到的 NFT 下降的例子,以及那些运行一般的机器人,愿意进行所有类型的交易,产生利润。
后者就是所谓的 "前驱 "机器人。前进者是那些积极通过 mempool(用户已经发送但尚未被开采的交易)寻找有利可图的交易的机器人。他们用自己的地址替换这些地址,并在本地进行测试,看它是否真的有利可图。如果是的话,他们就提交一个修改过的交易,用替换过的地址和比原始交易更高的天然气价格,从而在交易中获取利润。
当多个前线机器人陷入相互前线的循环中时,会发生有趣的事情,最终几乎没有利润。
闪光机器人
谈到 MEV,我们不能不谈 Flashbots。Flashbots 是一个独立的研究项目,它扩展了 go-ethereum 客户端的服务,允许搜索者直接向矿工提交交易,而不需要通过公共内存池。这意味着搜索者提交的交易对于 mempool 上的其他人来说是不可见的,除非他们真的被矿工纳入一个区块,在这一点上,做任何事情都太晚了。
到今天为止,大多数 MEV 交易都是通过 Flashbots 服务进行的,这意味着上述的一般化前导者不再像以前那样有利可图。那些前驱者是基于从 mempool 复制交易并提交更高的气体费用的想法。然而,通过 Flashbots,交易完全跳过了 mempool,因此一般化的前导者不能捡起今天发生的大部分 MEV。
Flashbots 还使 MEV 更加民主化,它为搜索者提供了直接接触矿工的机会--从而在一定程度上为你我这样的普通用户提供了提取 MEV 的机会,而不需要自己成为矿工。
我们很快会详细讨论 Flashbots 的问题。
MEV 和 Flashbots 的使用案例
我们在上面讨论了套利,让我们再看看 MEV 的几个例子。
清算
在 DeFi 借贷协议中,你可以用抵押品借入资产(例如用 USDC 借入 ETH),有一个清算的概念。当你以抵押品借入资产时,你只能借到比你的抵押品价值更低的钱。例如,如果我存入 1 个 ETH,而 ETH 是 3000 美元 - 我只能从借贷协议中借到少于 3000 美元的资金。不同的协议设置了不同的限制,但通常没有人让你借到 100%的抵押品,因为这意味着你的抵押品最小的价格变动都会影响你的借贷金额。
我越接近我的借贷金额的上限范围,我被清算的机会就越大。可能会有这样的情况,因为市场波动,你的借款资产的价值超过了你提供的抵押品的价值,或者超过了你被允许的借款额度的上限。在这种情况下,你的原始抵押品会被抢走。
每个协议都有不同的百分比,但在达到这个百分比后,大多数协议都允许外部世界的任何人对借款人进行清算。考虑到这非常类似于如果有人不按时支付贷款,他们作为抵押品的房子会被银行拍卖,银行会拿走贷款的原始价值+利息,并将剩余的钱归还。
同样,当借款人被清算时,他们的抵押品的一部分会归贷款人所有,其中包括利息和借来的钱。同时,借款人还必须支付清算费,清算费归启动清算交易的用户/机器人所有。
搜索者
运行算法来跟踪各种借贷协议上的借款人,以检测某人是否可以被清算。如果他们发现了一个清算某人的机会,他们可以通过第一个让他们的清算交易被挖掘出来,从而赚取清算费用,从这个机会中提取 MEV。
三明治攻击
三明治交易是一个完全符 合 Flashbots 和 MEV 使用案例的概念。让我们用一个例子来解释这个问题。
假设一个用户试图在 DEX 上做一个大的交易,希望卖出大量的代币 A
换取代币 B
。
卖出A
换取B
,将推低 A
的价格,在交易执行后增加 B
的价格。搜索者可以利用这一事实,使用户为代币 B 支付比他们最初预期的更多的钱(回顾大二时 DeFi 交易所层面的滑点)。
由于 Flashbots 让你与矿工直接沟通,而矿工决定区块中交易的顺序,你实际上可以设计你的 Flashbots 交易的方式,你可以指定你希望交易执行的顺序。通过这样做,搜索者可以创建两个交易--一个在用户的交易之前,一个在用户的交易之后--以赚取利润,具体如下。
- 搜索者卖出大量代币 A 换取代币 B,推动代币 A 的价格下降,推动代币 B 的价格上升
- 用户的交易通过了,这也是为代币 B 卖出了大量的代币 A,但收到的代币 B 比最初预期的要少。这进一步推低了代币 A 的价格,增加了代币 B 的价格。
- 搜索者卖回他们的代币 B 以换取代币 A,最后得到的代币 A 比他们一开始得到的要多,赚了一笔。
由于搜索者在用户的大额交易前后向区块添加了两笔交易,因此被称为三明治攻击。
随着 MEV 和 Flashbots 的兴起,三明治攻击机器人变得如此猖獗,以至于不得不制作特殊的去中心化交易所,其功能正是为了防止这种情况。例如,mistX 是一个 DEX,它本身通过 Flashbots 提交所有的交易,从而完全绕过了 mempool,这意味着其他搜索者不能对 mistX 上发生的交易进行三明治攻击,尽管矿工本身仍然可以。
夹层攻击也是关注隐私的 L2 和私人交易成为热门话题的一个重要原因,因为如果矿工的搜索者不可能知道谁 的地址在交易什么以及有多少交易,他们就不能夹层交易。
从被破坏的账户中恢复资金
让我们来看看 Flashbots 的一个用例,它实际上是一个净值,而且在这个过程中不会像三明治攻击那样伤害其他合法用户。
假设你的 ETH 私钥被盗,而你有一堆主网的资金和 NFT。有很多机器人会在 Github 上搜索被意外推送的私钥,试图从该账户中窃取资金。一般来说,他们正在寻找 ETH 或其他知名的代币,而往往不关心 NFT,无人认领的空投代币,不太知名的代币,或 DeFi 池和协议中的代币。
那么就有可能,而且偶尔会发生,一个机器人会偷走你所有的 ETH 和代币,但还有其他他们不关心的资产,价值不菲,而你想找回它们。不幸的是,你需要 ETH 来支付交易的气体,而当你发送任何 ETH 到一个被破坏的账户时,它很可能在你做任何事情之前就被机器人偷走了。
进入 Flashbots。在这种情况下,很多人把 Flashbots 用得很好,他们可以设计一捆交易,首先从不同的账户向被攻击的账户发送一些 ETH,然后自动提取机器人没有偷走的所有资产,并要求矿工在同一区块内按该顺序排序。通过跳过 mempool,并确保这两笔交易将被包含在同一个区块内,机器人就不能再在你提取资产之前,对你的交易进行前置处理并窃取你的 ETH。
事实上,这种确切的方法已经导致无数人从被盗账户中恢复了(数十万)。
好处和坏处
优点
它对许多 Defi 项目来说是好的,因为套利可以纠正多个 DEX 之间的价格,而协议依赖于清算,以确保借款人不会低于他们的抵押品,这对 DeFi 协议是不利的。此外,像追回被盗资金这样的用例可以说是一个净积极因素,有助于该空间。
缺点
缺点是,前锋和加油战导致用户的油价非常高,这对用户体验不利。此外,可能会有这样的情况:矿工在挖完一个区块后发现有一个 MEV 的机会,他们本可以赚取更多的利润。因此,在这种情况下,他们可以重新挖掘区块,包括 MEV 交易,这可能会导致系统的不稳定。
我们之前了解到,如果由于网络上的延迟而发生分叉,区块可以被重组,最终选择最长的链作为经典链,这可能涉及到某些区块被删除,并在跟随其他(较短)链的节点上被替换。然而,如果 MEV 的机会足够大,矿工可能会试图故意造成分叉并重组区块,只是为了尝试盈利,虽然这也涉及到一些运气,因为他们现在必须能够产生一个比另一个更长的链。
解决方案?
我们在上面简要地谈到了 Flashbots,但本质上 Flashbots 的建立是为了解决与 MEV 有关的弊端。他们正试图建立一个无许可、透明和公平的生态系统,以获得更好的 MEV 和保护,防止前面的运行。通过将获得 MEV 的机会民主化,不仅仅是矿工,Flashbots 允许像你和我这样的用户也对这些机会采取行动,而不仅仅是被利用。
目前以太坊生态系统的问题是,交易是在一个开放的内存池中发送的,所有的人都可以看到,这就导致了潜在的前台运行。它还有一个额外的缺点,如果你发送了交易,但你的交易实际上没有被执行,你最终还是会损失一些气体。
另一方面,没有一个公共的 mempool 也是相当有问题的,因为这意味着矿工肯定是唯一能提取 MEV 的人。这方面的一个很好的例子是 Avalanche 链,他们修改了 go-ethereum 客户端,完全隐藏了公共 mempool,只有矿工可以接收待处理交易。这导致矿工提取所有的 MEV,而用户对此无能为力。
因此,它催生了 DAO 和项目,这些项目合作他们的资源来建立采矿节点,然后以运行你自己的 Avalanche 节点(目前高达 200,000 美元)的一小部分成本向多个用户出售对内存池的访问。
相反,Flashbots 创造了一些非常酷的东西,他们决定允许用户私下交流他们想要的交易顺序,并出价他们愿意付出的金额。如果他们的出价失败,用户最终不会支付任何东西,因为如果交易不盈利,矿工不会得到任何东西。这种机制消除了前期运行。
🤔 为什么前面跑的机器人不再常见了? 因为前台交易已经无利可图了 因为在以太坊上没有更多的盈利机会 因为现在大多数 MEV 都是通过 Flashbots 进行的,它跳过了公共 mempool。
Flash 机器人的架构
让我们进一步了解 Flashbots 下面的一切是 如何运作的
正如你在图中看到的,有三方参与,即搜索者、中继者和矿工。
从本质上讲,搜索者
希望向矿工发送一个私人请求,这样他的交易就无法在以太坊的开放内存池中看到,从而防止他在前面运行。
搜索者
通过以太坊交易以天然气价格或直接支付给 coinbase 地址(矿工的地址)的形式表达他们的出价。使用直接付款而不是天然气价格,允许用户只有在他们的竞标成功时才付款,而只有高额的天然气费用意味着矿工仍然有动力收录你的交易,即使它不赚钱,因为他们仍然会从你那里获得天然气费用。然而,使用直接支付意味着你的交易必须通过智能合约执行(而不是 EOA),因为在智能合约中,你可以访问 block.coinbase 变量。根据使用情况,你可能需要在主网部署一个新的智能合约,这样才有可能。
现在问题来了,因为 搜索者
不需要为失败的投标支付任何费用,他们可能会进行 DOS 攻击,用无效的交易捆绑物向矿工们发送垃圾邮件。为了防止这种情况,用户的交易首先被发送到中继器,中继器对交易捆绑进行验证,同时进行捆绑合并。中继器也有一个信誉系统,合法的搜索者随着时间的推移建立起他们的信誉,而 DOS 攻击者等则会失去信誉,从而使他们更难搞乱系统。
Flashbots 的官方文档建议,在系统完全去中心化之前,不要与 Flashbots 以外的中继器整合,因为中继器可以获得完整的交易数据,并可能将其用于自己的利益。
想支持 Flashbots 中继的矿工运行 MEV 修改的以太坊客户端代码,例如 mev-geth 是 go-ethereum 的一个扩展。截至目前,超过 80% 的以太坊矿工正在使用 MEV 修改过的以太坊节点版本。
矿工可以评估交易捆绑,并将不冲突的交易捆绑在一起,形成最有利可图的区块。
eth_sendBundle
Flashbots 引入了一种新的 eth_sendBundle
RPC,它是一种与 flashbot 中继器和矿工交互的标准格式。它包括一系列任意签名的以太坊交易以及一些元数据
这是它需要的所有参数的列表:
{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_sendBundle",
"params": [
{
txs, // Array[String], A list of signed transactions to execute in an atomic bundle
blockNumber, // String, a hex encoded block number for which this bundle is valid on
minTimestamp, // (Optional) Number, the minimum timestamp for which this bundle is valid, in seconds since the unix epoch
maxTimestamp, // (Optional) Number, the maximum timestamp for which this bundle is valid, in seconds since the unix epoch
revertingTxHashes, // (Optional) Array[String], A list of tx hashes that are allowed to revert
}
]
}
(引用自 flashbots 的文档)
探索
为了查看 MEV 多年来的进展情况,flashbot 团队构建了一个探索器。去看看吧,太神奇了。按照这个链接
MEV 示例
- 真实世界的套利 MEV 交易
目前,大多数 flashbots 的工作仍处于研究和早期阶段。但正如我们都可以理解的那样,它有很多潜力。
Web3 充满潜力,我们才刚刚开始 🚀 👀
哇 🤯