第一轮:直接调用合约 为了确保我们的基线陷阱能够正常工作,我们首先使用获得者帐户来调用合约。第一次尝试时,交易费相对较高(由ETH框架设定),我们成功收回了资金。 这可能是由于利润过低,无法吸引捕食者,或者因为交易挖掘得太快,它们无法做出反应。显然,这并不是我们想要的结果,因为捕获捕食者是我们的目标。 第二轮:给他们时间思考 在这一轮中,我们解决了之前遇到的问题。我们增加了潜在利润并降低了交易费,这样交易就不会被挖得太快,给机器人时间去发现它。该合约还追加了0.04 ETH(比之前增加了0.005)。 这一次,我们成功了。该交易在被挖掘前等待了大约3分钟,没有从合约中获得价值。根据合约的内部交易,我们可以发现资金流向了别人。 当前事务使用25.000001111 Gwei(.000001111Gwei高于我们所使用的值),并且与尝试的“提取”在同一个块中被挖掘。 培养追踪者 既然我们已经成功地找到了一个机器人(付出了一些代价),我们可以得出一些有趣的见解。首先,事务表明对合约的调用没有直接执行。机器人并不只是复制交易并盲目地从一个拥有的帐户发送它,而是通过代理智能合约传递它,该代理智能合约充当一个智能钱包来执行这些交易。 现在,我们可以跟踪以前和将来的事务地址,以查看机器人的成功程度及其操作方式。 反编译合约有两个主要功能: “提款”,基本上就是把合约中的所有资金都交给合约的运营商。另一个函数接收一些参数:一个要调用的合约、一个参数列表和一个传递的值参数。 通过该功能,代理合约为运营商充当了智能钱包的角色。除了执行调用外部函数的能力,它还可以保证交易开始时的余额至少和交易结束时的余额一样多,否则还可以恢复,从而避免在调用未知合约时可能出现的资金损失(当然,交易费用除外)。 使用Dune Analytics,我们可以看到自2018年5月开始机器人取得了多大的成功! 假设这个特定的机器人总是使用相同的代理和发送地址来发行交易,我们可以估计它的收益总计约17 ETH(在本文撰写时约为1万美元)。 第三轮:他们到底有多聪明? 现在我们已经确信机器人要攻击我们了,我们想测试是否可以通过第二个合约(一个代理,它将调用一个函数来从给予者那里提取诱饵)来混淆我们的调用,从而从我们的合约中提取诱饵。(合约中也有“收款”功能,可以将款项返还给我们)。 我们部署了ProxyTaker合约,并调用了适当的函数,试图提取我们的资金。由于通过代理收取资金的成本略高,授予者合约的金额略高,为0.055 ETH。你瞧,我们的交易立刻被另一个机器人抢跑了。 (责任编辑:admin) |