主页 > imtoken交易所下载 > 抢先交易机器人:以太坊黑暗森林中的怪物

抢先交易机器人:以太坊黑暗森林中的怪物

imtoken交易所下载 2023-10-25 05:07:56

以太坊和以太币有什么区别_以太坊买卖_以太坊官网以太坊

这是一个恐怖而真实的故事。

以太坊官网以太坊_以太坊和以太币有什么区别_以太坊买卖

1 个挑战

像任何正常人一样,我花了很多时间潜伏在 Uniswap Discord 支持频道(披露:Uniswap 是 Paradigm 投资组合公司)。

周三下午,有人询问是否有可能恢复意外发送到配对合约的 Uniswap 流动性代币。

我最初的想法是令牌将永远被锁定,但那天深夜我突然意识到,如果令牌还在那里,任何人都可以去取回它们。

当任何人调用 Uniswap 核心合约上的销毁功能时,该合约会测量其自身的流动性代币余额并将其销毁,将提取的代币提供给调用者指定的地址。 这是 Uniswap v2 预期行为的核心部分(基本机制在 Uniswap v2 白皮书的第 3.2 节中进行了描述)。

我找到了合约,流动性代币还在,价值大约 12,000 美元。

这意味着三件事:

有一个滴答作响的时钟,任何人都可以随时提取自己的流动性并意外地从合约中获得这些代币,即使没有其他人注意到这些自由资金;

我可以戴上我的白帽子,并尝试帮助所有者取回他的代币。 这很简单。 我只需要调用池的 burn 函数并将它传递给我自己的地址。

只是……我知道这并不容易。

2 黑暗森林

众所周知,以太坊区块链是一个高度敌对的环境。 如果可以利用智能合约获利,它最终将被利用。 黑客攻击的频繁发生表明,一些非常聪明的人会花费大量时间来检查合同中的漏洞。 但与 Mempool 相比,这种无情的环境相形见绌,Mempool 是一组未决的、未确认的交易。 如果区块链本身是一个战场,那么内存池就更糟了:一片黑暗的森林。

以太坊买卖_以太坊和以太币有什么区别_以太坊官网以太坊

我最喜欢的科幻小说《黑暗森林》引入了“黑暗森林”的概念,在这种环境中,检测到某些高级捕食者就意味着死亡。 在这种环境下,公开识别某人的位置与彻底摧毁他们一样好。 (这个概念也是以太坊测试网上的黑暗森林游戏的灵感来源。)

在以太坊 Mempool 中,这些顶级掠夺者将采取“套利机器人”的形式。 套利机器人监控未决交易并尝试利用它们创造获利机会。 没有白帽子比 Phil Daian 更了解这些机器人,他和他的同事一起撰写了 Flash Boys 2.0 论文并创造了术语“矿工可提取价值”(MEV)。

菲尔曾经告诉我他称之为“广义快跑者”的宇宙恐怖。 套利机器人通常会在 Mempool 中寻找特定类型的交易(例如 DEX 交易或预言机更新),并尝试根据预先确定的算法抢先交易。 通用领跑者通过复制地址并用自己的地址替换来寻找任何使领跑者获利的交易。

这就是为什么这次救援行动并不容易。 任何人都可以调用 burn 函数,如果我提交调用 burn 函数的交易,它就像一个闪烁的“free money”标志,直接指向这个盈利机会。 如果这些怪物真的在 mempool 中,它们会看到、复制然后变异,并在我的交易被接受之前抢占它。

请注意,这种环境比以太坊区块链本身的状态更加残酷。 这些免费资金已经在区块链上放置了大约 8 个小时,未被发现,等待任何调用 burn 函数的人从资金池中提取。 但在飞行过程中,任何试图捡起它的尝试都立即遭到挫败。

3 救援行动

为了在不通知机器人的情况下提取资金,我需要混淆交易,这样机器人就无法检测到它对 Uniswap 对的调用,这将涉及编写和部署自定义合约。 虽然我是一名专业的 DeFi 思想领袖,但我以前从未在以太坊上部署过合约。

我需要帮助,已经过了午夜。 幸运的是,我认识的一些最优秀的智能合约工程师都住在欧洲时区。 我在 Paradigm 的同事 Georgios Konstantopoulos 同意帮助部署合约并提交交易。 我们的另一家投资组合公司 Yield 的首席工程师 Alberto Cuesta Cañada 自愿执行了合同。

一些优秀的以太坊安全工程师帮助我们想出了一个混淆方案。 除了将调用隐藏为内部交易外,我们还将交易分为两部分:激活我们合约的 set 交易和激活合约时节省资金的 get 交易。 具体实现如下:

部署一个 Getter 合约,当被所有者调用时,只有在激活时才会发出 burn 调用,否则会恢复;

部署一个 Setter 合约,当所有者调用时将激活 Getter 合约;

在同一个区块中提交集合交易和获取交易;

以太坊买卖_以太坊和以太币有什么区别_以太坊官网以太坊

图:我们自定义智能合约的代码

如果攻击者只尝试执行 get 事务,它将在不调用 set 事务的情况下恢复。 我们希望在攻击者按顺序执行两个交易之前,我们的交易被包含在区块中。

以太坊官网以太坊_以太坊买卖_以太坊和以太币有什么区别

图:我们的救援脚本

令我们惊讶的是以太坊买卖,即使我们手动增加了汽油费,设置的交易也被 Infura 拒绝了。 在几次失败的尝试和重置之后,时间给了我们压力,然后我们开始变得马虎了。 我们让第二笔交易晚了一个区块。

而这成为了一个致命的错误!

我们的get交易确实包含在内,但是出现UniswapV2: INSUFFICIENT_LIQUIDITY_BURNED错误,也就是说流动性代币没有了。 结果是在我们的 get 交易进入 mempool 的几秒钟内,有人执行了调用并清除了资金。

怪物吞噬我们。

4节课

第 1 课:怪物是真实存在的!

尽管从理智上讲,我们知道这些领先的机器人很普遍,但您很有可能低估了它们,直到您真正看到它们在起作用。

我们碰碰运气,通过授权合约做了一个内部调用rescue,我们以为这样可以保护我们,但是并没有。

如果您发现自己处于这种情况,我们建议您联系一直致力于该主题的安全研究员 Scott Bigelow,他有更好的混淆原型实现。

第 2 课:不要操之过急

即使时间紧迫,也要坚持原计划。 如果我们花更多的时间在脚本上,调整合约(可能将 Getter 合约更改为什么都不做,而不是在激活前恢复调用),或者甚至同步我们自己的节点以避免使用 Infura,我们也许可以将两个事务转换为放入同一个块中。

第 3 课:不要依赖通用基础架构

你做的事情越奇怪,你就越难通过像 Infura 这样的现有基础设施。 在我们的案例中,我们试图提交一个交易,根据区块链的当前状态,它看起来会失败,而 Infura 对此有合理的保护措施。 使用我们自己的节点可以避免这个问题。

或者,如果您碰巧认识一个大矿工(我们不认识),您可以让他们将您直接提交的交易包含在一个区块中,完全跳过内存池和怪物。

第 4 课:未来只会变得更可怕

以太坊和以太币有什么区别_以太坊买卖_以太坊官网以太坊

这只是发生在我们身上的抢先事件的一个例子,类似的事情每天都会发生很多次。 今天,抢先交易者只是机器人,明天以太坊买卖,他们可能是矿工。

如今,矿工们并没有抓住这些机会将钱留在原地,但不能保证他们将来会重新排序并提交自己的交易以服务于自己的利益。 更糟糕的是,他们可能会重建其他矿工开采的区块,以试图窃取他们并未认领的 MEV,从而导致区块链不稳定。

我们相信这种未来是可以避免的。 Optimism(另一家 Paradigm 投资组合公司)有一个雄心勃勃的愿景,即如何将 MEV 重新用于生态系统的利益,作为其第 2 层可扩展性解决方案 optimistic rollup 的一部分。

如果您正在考虑 MEV,或在该领域进行构建,请联系我们!

感谢 Alberto Cuesta Cañada、Scott Bigelow、Phil Daian、Charlie Noyes 和 Sam Sun 对本文的帮助。

﹏﹏﹏