主页 > imtoken下载安装 > 科学家在行动:在以太坊的黑暗森林中狩猎潜行机器人

科学家在行动:在以太坊的黑暗森林中狩猎潜行机器人

imtoken下载安装 2024-01-26 05:08:52

以太坊怎么充值_以太坊钱包怎么充值_以太坊怎么充值

抢先交易机器人如何拦截资金? 如何避免成为领跑者的厄运?

作者:Alex Manuskin,加密货币钱包 Zengo 区块链研究员,链闻授权发布本文中文版 编译:Perry Wang

以太坊黑暗森林中的怪物可不是闹着玩的。 这些前端运行的机器人分析智能合约指令及其之前从未在智能合约中使用过的功能,以提取潜在回报。

为了更好地理解这些机器人,本文提供了一次穿越以太坊黑暗森林的漫游之旅。 让我们更深入地研究一下这片黑暗的森林,看看它们有多猖獗。

我们设法通过捕获一些常见类型的前端运行机器人并分析它们的行为来“利用陷阱”。

以太坊怎么充值_以太坊怎么充值_以太坊钱包怎么充值

在这次漫游中,我们检查了这些抢先交易机器人的效率以及它们猎杀各种交易的可能性。 当然,我们也测试了不同的规避方式。

下面,欣赏。

什么是前跑?

一般来说,抢先交易(front-running)是指在已知的未来交易发生之前跳入执行队列套现交易的行为。

抢先交易的一个简单示例是交易所出价。 假设有人即将在 Uniswap 上大量购买 ETH,足以推高 ETH 的价格。 从这种情况中获益的一种方法是在价格仍然很低的情况下,在导致大笔购买的时刻提前加载 ETH。 然后,在 ETH 价格飙升后立即卖出以锁定利润。

除了这种套利交易实例之外,还有许多途径可以利用抢先交易来获取价值,包括清算、购买稀有 NFT 或简单地制造用户错误。 (一笔交易或交易序列的可提取价值称为“矿工可提取价值MEV”)

以太坊中的抢先交易可以通过支付比正常情况稍高的 gas 价格来实现,这样可以鼓励矿工在构建区块时优先考虑他们的交易。 交易支付的手续费越高,执行顺序越高。 因此,如果两笔交易将从同一个区块中调用智能合约的同一指令中获利,则只有最先完成的交易最终会获利。

动物行为学

Dan Robinson 和 Georgios Konstantopoulos 合着了“以太坊是一片黑暗的森林”博客文章,描述了被套利机器人拦截的经历,试图在以太坊智能合约中保存价值 12,000 美元的代币。 这些超级掠夺者机器人非常先进,它们可以追踪以太坊交易池中任何有价值的交易,并通过抢先交易的方式拦截它。

连文注:《以太坊是一片黑暗的森林》文章中文版可查阅:

黑暗森林的故事实在是太“毛骨悚然”了,刚开始看文章的时候简直不敢相信。 事实上,有理由质疑这种超级捕食机器人的存在。 为什么有人可以从 Uniswap 协议中拿走资金? 这个平台是不是被无数机器人盯上了? 这些机器人只是一群普通的“套利者”吗?

以太坊钱包怎么充值_以太坊怎么充值_以太坊怎么充值

今年早些时候,我们发表了一份分析报告,确认它们不是普通的“套利机器人”。 据我们所知,他们设法调用了以前从未调用过的智能合约函数。 即使交易被代理智能合约混淆,这些机器人仍然可以通过此类操作窃取资金。

至少可以说,这令人震惊。 监控交易池中任何交易的能力是一个强大的武器。 令人不安的是,一些服务提供商开始公开提供“暗池”交易层。

“暗池”交易层不使用 Infura 之类的服务,甚至不使用私有节点,而是将交易直接发送给矿工,矿工承诺不会将其广播到网络的其余部分,从而使交易免受掠夺者雷达的攻击。

知名白帽 samczun 曾在与多家合作伙伴从泄露的智能合约中挽救 960 万美元的操作中使用了类似的方法。 不难想象,矿工开始操纵领先的机器人,同时只为支付溢价的交易者提供安全访问。

恋文注:关于这个故事的文章中文版可以在以下网址找到:

与以太坊的其他元素不同,这些机器人只能在以太坊主网上活动,而智能合约可以在开发环境或测试网上进行测试。 除了一些初始实验之外,这些机器人尝试在测试网上抢先交易在经济上没有意义。 此外,由于隐藏的逻辑,这些机器人的操作规则可能会有所不同。

我们不知道这些领先的交易掠夺者决定攻击的条件。 因此,在某些方面以太坊怎么充值,追踪这些食肉动物类似于追逐稀有动物。

我们不针对所有领先的交易机器人,而是针对特定的,即此类机器人的一般类型。

我们需要一个独特的“陷阱”来确保我们捕获的领先机器人是“真正的”广义领先者。 该陷阱是一个新创建的智能合约,由一个秘密字符串的 SHA256 哈希启动,并附有一些资金。 任何人都可以通过提供秘密合约来提取锁定的资金。 资金将直接发送至提款交易的发送方。

这个陷阱的想法是以提供正确秘密合约的方式发送“诱饵”交易,看看是否有人试图自己复制并提供秘密合约,从而拦截资金。 如果有人在诱饵交易前切断了资金,就意味着有人可以在交易池中分析交易池,复制其相关内容,并自行发出秘密合约。

有趣的是,这些机器人能够在一个前所未有的智能合约中削减资金,因为这是一个他们事先不知道的秘密合约——它们确实是真正的通用前端运行机器人。

广义抢先交易机器人的工作机制

这个实验的一个组成部分是理解通用的前端运行机器人是如何工作的。 但是如果有人建立了一个赚钱机器,他们就不能在 Github 上分享它。 因此,我们只能对掠夺性机器人的行为进行观察和逆向工程。

构建通用的前端运行机器人通常需要两个组件:

这些机器人的操作者使用某种技术扫描交易池中的每笔交易,对其进行解析,替换其参数(例如,交易调用者),并确定拦截它是否有利可图。

以太坊怎么充值_以太坊怎么充值_以太坊钱包怎么充值

以太坊怎么充值_以太坊钱包怎么充值_以太坊怎么充值

抢先交易机器人工作流程

理性机器人不会对交易费用超过可能利润的交易发起拦截攻击。 汇总的交易费用可能很高,尤其是当 gas 价格很高时,因此前端运行的机器人需要一定的最低利润才能攻击我们的诱饵交易。

此外,时间至关重要,因为机器人需要分析池中的每笔交易(其中有很多)。 以太坊平均需要 12 秒来生成一个块。 如果交易的 gas price 足够高,则必须在下一个块生成之前对其进行分析,并足够快地替换它。

这是一个有一定概率的过程。 交易广播后,可能会立即挖出一个区块,导致机器人来不及成功解析交易,广播抢占式交易。

考虑到这些因素以及一些想法,我们测试了抢先运行的机器人切断诱饵的条件。

陷阱

我们的智能合约 (Giver: ) 初始余额为 0.035 ETH,当时价值约 20 美元。 任何人只要向合约中存储的哈希提供正确的秘密合约,就可以拿走资金。 接受这些资金的交易会触发掠夺者的抢先交易,另一个账户(接受者)会尝试提供适当的秘密合约来提取资金。

第一轮:直接调用合约

为确保基线陷阱有效,我们首先使用接收方账户调用合约。 第一次尝试时,gas 价格比较高(由以太框架决定),我们成功收回了资金。

我们可能会成功,因为切断交易的利润太低而无法打动掠夺者,或者因为交易被快速包含在区块中以至于机器人没有时间采取行动。 显然这不是我们所期望的,我们的目标是引诱掠食者进入我们的陷阱。

第二轮:给捕食者思考的时间

这一轮我们解决了之前遇到的问题。 我们增加了潜在利润并降低了汽油价格,因此交易不会过快地写入区块,让机器人有时间找到它。 合约余额增加到0.04 ETH(余额比之前增加0.005 ETH)。

这次我们受到了攻击。 交易在写入区块前卡住了大约 3 分钟,最终未能从 trap 智能合约中提取价值。 我们审查了合约的内部交易,发现资金被他人截获。

链闻注:交易地址为

这笔抢先交易花费了 25.000001111 Gwei(0.000001111Gwei 比我们使用的 Gwei 数量高),和我们的交易写入了同一个区块,这显然是一个拦截操作。

链闻注:抢占交易地址为

以太坊怎么充值_以太坊钱包怎么充值_以太坊怎么充值

种植体追踪器

既然我们的陷阱已经成功捕获了一个机器人(并且以我们为代价),我们可以提炼出一些有趣的见解。

首先,交易显示没有直接执行对智能合约的调用。 该机器人不是复制交易并从其拥有的账户盲目发送,而是通过代理智能合约传递交易,该合约充当执行这些交易的智能钱包。

我们现在可以跟踪以前和未来的交易,以更仔细地了解这个机器人的真正强大程度以及它是如何工作的。

以太坊钱包怎么充值_以太坊怎么充值_以太坊怎么充值

该机器人使用自己的代理合约

Decompiling() 合约,揭示了两个主要功能:

“提现”主要是将合约中的资金全部发送给机器人的运营者。 另一个函数接受一些参数:要调用的合约、参数列表和传递值参数。

有了这个功能,这个代理合约就充当了机器人运营商的智能钱包。 除了能够执行调用外部函数的功能外,还可以保证交易开始时的余额至少等于结束时的余额,否则可以恢复交易,从而避免可能的损失调用未知合约时的资金(当然不包括 Gas)。

使用 Dune Analytics 工具,我们可以看到该机器人自 2018 年 5 月开始运行以来一直在高效工作。

假设机器人一直使用相同的智能代理和接收地址发起抢先交易,我们可以估计它总共赚取了大约 17 ETH。

以太坊钱包怎么充值_以太坊怎么充值_以太坊怎么充值

机器人在不同时间段赚取的资金(ETH)

第三回合:这些机器人有多聪明?

现在我们确信这个机器人正在积极攻击我们,我们想测试我们是否可以通过第二个合约(代理合约)混淆我们对合约的调用来成功地从合约中提取诱饵资金,该合约将调用一个函数来提取来自诱饵合约 (giver) 的诱饵资金。 (该合约还有一个“接收”功能,可以将资金返还给我们)。

我们部署 ProxyTaker 合约,调用适当的函数,并尝试提取资金。 由于通过代理行事的成本比以前略高,赠予合约的余额已调整为 0.055 ETH。 结果是我们的交易立即被另一个机器人领先。

以太坊怎么充值_以太坊怎么充值_以太坊钱包怎么充值

链闻注:ProxyTaker合约地址为

调用地址是

机器人抢占交易地址为

这一次机器人的逼近更加惊险。 机器人不仅检测到我们的取款交易,而且从一个完全不同的智能合约的内部调用中识别出它! 这一切都在创纪录的时间内完成,我们的取款交易在几秒钟内被写入新区块,就像 Predator 的抢先交易一样。

机器人的身份也很有趣。 机器人的智能合约( )主要由这个账户( )操作。 该帐户曾在 Etherescan 上发表评论,当时主要话题是白帽讨论从有问题的 Bancor 智能合约中节省资金。

以太坊钱包怎么充值_以太坊怎么充值_以太坊怎么充值

运营商账户中的信息(来源:etherscan)

考虑到机器人的相同行为特征(使用账户A调用代理向B账户转账),以及与上述交易的邻近性特征,有理由怀疑该机器人也进行了资金救助操作上述事件中的白帽 ( ) 广义抢先交易。

这个机器人比我们之前遇到的那个机器人聪明多了。 它不仅针对ETH交易,还进行各种套利交易。

单从它的账户余额来看,它的收获成果要高得多。 该账户目前余额约为 300 ETH(目前定价为 180,000 美元)。 我们还可以统计合约地址的所有流入和流出,来估算其收入,总计约900 ETH。

这只是一个粗略的估计,因为该账户的交易可能与其抢先交易活动无关。 以下是该机器人所有获利交易的列表:

为了让挑战更精彩,我们做了一个更隐蔽的尝试,这次使用的是 OwnedTaker以太坊怎么充值,一个只对我们开放的代理合约。

这个陷阱和第三轮很像。 Giver 合约余额为 0.05 ETH。 同一笔交易中还包括一笔将资金返还给我们而不是留在合约中的交易。

在第一次尝试中,将资金支付给 OwnedTaker 合约的交易 ( ) 花了大约 1 分钟的时间才写入区块,我们最终收回了资金。

然后我们重复实验,这次将 giver contract 的余额增加到 0.06 ETH,这是我们迄今为止使用的最高余额,以确保抢先交易机器人不会因为价值太低。

气体值也有意设置得很低。 交易()卡住了大约7分钟,但我们还是成功提现了。

以太坊怎么充值_以太坊钱包怎么充值_以太坊怎么充值

添加一个只能由合约所有者转发的Owned代理合约使得上述两个已知的领先交易机器人无法成功解析数据并拦截两次交易中的数据。

以太坊怎么充值_以太坊怎么充值_以太坊钱包怎么充值

提现成功

也许只允许合约所有者执行调用的要求,或者将资金发送到与调用合约不同的目的地地址这一事实,可以帮助避免机器人进行抢先交易尝试。

机器人很可能被调整为首先考虑自我保护。 毕竟,他们正在调用一个未知的合约,该合约可能会执行任意代码。 可以合理地假设,如果利润得不到保证,他们将避免不必要的风险或交易费用损失。

取决于你如何看待它。 我们使用新合约,但只有我们知道这个秘密合约。 很明显,我们发现的两个领先的交易机器人正在交易池中进行所有交易,从他们的利润来看,他们做得很好。

为什么我们在上次尝试中没有被抢先?

具体原因很难判断。 可能是机器人不想冒险与经过身份验证的合约进行通信,或者资金被转移到另一个地址的事实是出乎意料的。

这绝对并不意味着这是避免领先于交易的完全可行的方法。 最有可能的是,以太坊交易池中潜伏着更复杂的机器人,它们根本不愿意冒这么小的利润风险。

在这个简短的实验中,我们能够证明存在通用的前端运行机器人,以及它的智能程度。

当然,我们很清楚我们的实验既不完整也不确定。 存在许多其他机器人,它们以非常不同的方式被触发和运行,潜在盈利能力、通信特征和最小复杂性(例如,通过 gasLimit)等因素可能会影响它们的运行方式。

但是,我们确实相信我们的工作提供了概念验证,可以进一步了解这些通用的前端运行机器人的作案手法。

令人震惊的现实是,如果有任何人都可以调用智能合约从中获利的交易,即使它非常隐蔽,现实情况是抢先交易的机器人很可能会首先窃取资金。

了解这些机器人及其操作方式至关重要,这样我们现在和将来都能构建更安全的系统。 诸如 Flashbots 之类的项目试图通过使 MEV 提取民主化并使其成为公共资源来做到这一点。 我们希望这项研究有助于实现这一目标。

感谢 Tal Be'ery、Omer Shlomovitz、Oded Leiba、Dan Robinson 和其他帮助审阅本文的人。

链闻注:文中作者使用的相关合约代码可在原文附录中查看:

以太坊怎么充值_以太坊钱包怎么充值_以太坊怎么充值

加密原生安全和隐私基本指南