主页 > 怎么注册imtoken钱包 > 科普 | 在以太坊的黑暗森林中捕捉通用隐身机器人

科普 | 在以太坊的黑暗森林中捕捉通用隐身机器人

怎么注册imtoken钱包 2023-08-01 05:15:38

以太坊黑暗森林中野兽横行,并不耸人听闻。 这些先发制人的机器人可以通过分析合约的调用找到潜在的利润空间,即使这些调用和合约是它们从未见过、一无所知的东西。

鉴于大多数人对机器人知之甚少,我们将深入了解情况并了解机器人的常见程度。 我们设法“捕获”了一些常见的抢先交易机器人并分析了它们的行为。 我们研究了这些机器人的效率以及获得抢先交易的可能性。 我们还测试了防御抢先交易机器人的不同方法。

什么是领跑者?

通常,抢先交易是在已知的未来交易发生之前,将另一笔交易插入到执行队列中的第一位。

一个简单的例子是交易所的交易过程。 假设有人想在 Uniswap 上大量买入 ETH(足以引起 ETH 价格上涨),一种获利方式是在价格上涨之前买入 ETH,在大量买入交易带动后卖出 ETH ETH 的价格上涨。

除了这个例子之外,领先其他交易有可能获得巨大的利润如何判断以太坊交易是否成功,例如清算、购买稀有 NFT(不可替代代币)或简单的用户错误。 【一笔交易或一组交易的可提取价值就是矿工的可提取价值(MEV)】

在以太坊上,可以通过提供比目标交易略高的 gas 价格来实现抢先交易,从而激励矿工在构建区块时优先考虑自己的交易(而不是目标交易)。 Gas 价格高的交易将首先执行。 因此如何判断以太坊交易是否成功,如果将两笔想要从同一个交易合约调用中获利的交易打包到同一个区块中,只有排名第一的交易才能套利成功。

动物行为学

Dan Robinson 和 Georgios Konstantopoulos 在“Ethereum is a Dark Forest”中提到价值提取,其中 12,000 美元落入“掠夺者”的魔爪。 这个掠夺者非常强大,它可以跟踪以太坊交易池中的套利交易,并通过抢占这笔交易来获利。

黑暗森林的故事听起来如此“恐怖”,初读时难以置信。 我们确实有理由怀疑这种捕食者的存在。 如何从像 Uniswap 这样被机器人严格监控的平台上提取资金? Uniswap 已经成为“常规”套利者了吗?

今年早些时候,我们的深入分析文章证明并非如此。 这不是普通的机器人。 据我们所知,它成功调用了以前从未调用过的合约功能,并且即使原始交易被代理智能合约混淆,也成功提取了资金。

这至少应该引起我们的警觉。 能够监控交易池中的交易,就相当于拥有了一个大杀器。 因此,令人不安的是,一些服务开始公开提供“暗池”交易层。

这样的专属交易服务不使用像Infura这样的服务,甚至不需要运行私有节点,它会将交易直接发送给矿工,并承诺不会将交易传播到网络中的其他节点,从而保护了交易不被捕食者发现。

使用相同的方法,samczun 等人。 设法从易受攻击的合同中提取了 960 万美元。 不难想象,矿工们也开始运行抢先交易机器人,同时只为那些支付溢价的用户提供安全访问。

与以太坊的其他部分(例如,可以在开发环境或测试网中测试的智能合约)不同,这些机器人只在以太坊主网上运行。 对于这些机器人,除了最初的实验之外,抢先测试网交易无利可图,也不是很有趣。 此外,他们不需要像其他人一样遵守规则,因为他们的逻辑是隐藏的。

我们不知道这些抢先的掠食者会在什么情况下停下来。 因此,在某种程度上,追踪这些食肉动物就像是在寻找稀有动物。 我们不想找到所有的抢先交易机器人,这里只是一些通用类型的机器人。

为了确保我们捕获的快照程序是“真正的”通用快照程序,我们需要设置一个特殊的陷阱。 诀窍是使用秘密字符串的 SHA256 哈希创建一个新合约,并在合约中存入一些资金。 只有提供秘密字符串的人才能提取锁定在合约中的资金。 一旦有人发送提款交易,资金就会直接发送给交易的发送方。

这个想法是发送一个提供正确秘密字符串的“诱饵”交易,看看是否有人会复制该字符串并自己发送带有该字符串的交易以从合同中提取资金。 如果有人能够在诱饵交易之前提现,就意味着有人可以在交易池中分析诱饵交易,复制其相关内容,发送提供该内容的交易。

有趣的是,他们会给一个他们以前从未见过的合同,一个他们以前从未见过的秘密字符串来提取资金——一个真正的万能领跑者。

通用领跑者如何运作?

这个实验最重要的部分是理解通用的领跑者是如何工作的。 但是,如果有人造了一台赚钱机器,是不可能在Github上分享的。 因此,我们只能观察捕食者的行为,对其进行逆向工程。

构建通用快照程序通常需要两个组件。 第一个组件是一个以太坊账户,有或没有智能钱包代理,可以发送修改后的交易。 第二个组成部分是“后端”,是整个操作的大脑,通常发生在链下。 运营者可以使用一些技术来检查交易池中的每笔交易,解析交易,替换交易的参数(例如交易调用者),判断交易是否有利可图。

以太坊一次能交易多少_以太坊交易今日价格_如何判断以太坊交易是否成功

- 抢先交易机器人的处理流程-

理性的机器人不会尝试在交易费用超过潜在收益的情况下抢先交易。 交易费用可能很高,尤其是在汽油价格高的情况下。 因此,我们预计至少需要一些利润才能引诱机器人上钩。

此外,交易池中的交易数量较多,要对每一笔交易进行分析,时间非常紧迫。 开采一个以太坊区块平均需要 12 秒。 如果交易支付足够高的 gas 价格,领先者必须在下一个区块被挖掘之前快速分析并替换交易。

这个过程有一定的概率。 有可能一个交易被广播后,包含该交易的区块立即被挖出,机器人没有时间分析交易和广播抢先交易。

考虑到各种因素,我们测试了让机器人上钩的方法。

设下陷阱

我们的合约(诱饵)初始余额为 0.035 ETH,当时价值约 20 美元。 这笔钱将奖励给任何能够提供存储在该合约中的哈希值的正确原像的人。 为了拿走资金并引诱掠夺者,另一个账户(取款人)将尝试通过提供正确的原像来获取资金。

第一轮:直接调用合约

为了确保我们的陷阱有效,我们首先调用带有提款人账户的诱饵合约。 在第一次尝试中,以相对较高的 gas 价格(由 ethers 框架设置),我们设法取回了诱饵合约中的资金。

这可能是因为利润率太低而无法吸引掠夺者,或者因为交易被抢购得太快以至于掠夺者没有时间做出反应。 显然,这不是一个理想的结果,因为目标是钩住捕食者。

第二轮:给机器人足够的时间

在这一轮中,我们解决了之前遇到的问题。 我们提高了基础股权并降低了天然气价格,因此交易没有那么快被开采,给了机器人足够的时间来发现它。 我们还将合约中的资金增加到 0.04 ETH(比之前增加了 0.005 ETH)。

这一次,我们成功了。 这笔交易等待了大约 3 分钟才被挖出,最终未能取回诱饵合约中的资金。 在查看合约的内部交易后,我们发现资金已被他人占用。

这笔领跑者交易使用了 25.000001111 Gwei(比我们的多 0.000001111 Gwei),并与我们的交易包含在同一个区块中。

线索

现在我们已经设法捕获了一个机器人(并为此付出了一点代价),我们可以找到一些有趣的东西。 首先,这个抢先交易表明机器人并没有直接调用合约。 它不是复制取款人的交易并通过其拥有的账户发送,而是将交易发送到代理智能合约,代理智能合约充当智能钱包来执行交易。

现在,我们可以追踪这个bot之前和之后的交易地址,看看它成功抢占了多少笔交易,以及它是如何运作的。

如何判断以太坊交易是否成功_以太坊交易今日价格_以太坊一次能交易多少

- 机器人正在使用它自己的代理合同 -

反编译这个代理合约后,我们发现它主要有两个作用:

一是“提现”功能:它将合约中的所有资金发送给合约的运营者。 另一个函数负责接收参数:要调用的合约、参数列表和传值参数。

通过提款功能,代理合约可以作为运营商的智能钱包。 代理合约除了可以执行调用外部函数外,还可以保证交易开始时的余额不低于交易结束时的余额,否则恢复原状,从而避免潜在的损失由调用未知合约引起的(当然不包括 gas 费用)。

使用 Dune Analytics,我们发现该机器人自开始运行(可追溯到 2018 年 5 月)以来已经做了很多工作。

如果机器人总是使用相同的代理合约并发送地址进行交易,我们估计机器人总共赚取大约 17 ETH。

如何判断以太坊交易是否成功_以太坊交易今日价格_以太坊一次能交易多少

- 机器人自运行以来所获得的所有收入(以 ETH 为单位)-

第 3 轮:抢先交易机器人有多聪明?

既然我们确信机器人存在,我们想测试我们是否可以通过第二个合约混淆我们的调用来成功地从诱饵合约中取回资金。 第二个合约是一个代理合约,它将调用一个函数从诱饵合约中获取资金。 (该合约还有一个“取回”功能,可以让我们取回我们的资金。)

我们部署了一个 ProxyTaker 合约并调用该函数来尝试获取我们的资金。 由于使用代理合约提取资金的成本很高,我们将诱饵合约中的资金增加到 0.055 ETH。 果然,我们的交易立即被另一个机器人抢走了。

这次早期运行给我们留下了更深刻的印象。 机器人不仅能够检测到我们的取款交易,它实际上还认识到这笔交易来自一个完全不同的合约的内部调用! 它在很短的时间内就做到了。 我们的交易在几秒钟内就被成功挖掘了(这个机器人的交易也是如此)。

这个机器人的身份也颇为有趣。 这个机器人的合约主要由下图所示的账户控制。 该帐户在 Etherscan 上发布了一条评论,让人想起白帽黑客试图从易受攻击的 Bancor 智能合约中窃取用户资金的活动。

以太坊交易今日价格_如何判断以太坊交易是否成功_以太坊一次能交易多少