这一次更令人印象深刻。机器人不仅能够检测我们的提取事务,而且它从一个内部调用中,从一个完全不同的合约中识别它!以破纪录的速度完成了这一壮举。我们的提取交易在几秒钟内就被挖掘出来了(机器人也一样)。 机器人的身份也很有趣。bot的合约主要是由这个账户来操作的。该账户在Etherescan上发表了评论,将其与黑客试图从一份脆弱的Bancor智能合约中提取用户资金的案件联系起来。 考虑到机器人的相同行为模式(从账户A调用代理并将资金传递到账户B)和事件的临近性,有理由认为机器人在该事件中也在对白人黑客进行普遍的Frontrunning操作。 这个机器人比前一个复杂得多。它不仅关注ETH,还进行各种套利交易。 从收集资金的账户余额来看,它也要成功得多。目前,余额约为300 ETH(撰写本文时约为18万美元)。我们也可以从合约地址中减去所有的资金流入和流出来估算其收益,总计为~900 ETH。这只是一个粗略的估计,因为该账户可能进行了与其前端运行活动无关的交易。(以下是所有有正值的机器人交易列表)。 最后一轮:成功提取 为了让这个挑战更有趣一点,我们又做了一次混淆的尝试,这次使用了一个只有我们可以使用的代理合约,一个OwnedTaker。 设置类似于第三轮。授予合约追加了0.05 ETH。这笔资金也在同一笔交易中转回给我们,而不是保留在合约中。 在第一次尝试中,对OwnedTaker合约的交易花了大约1分钟时间挖掘,我们成功地提取了资金。 实验重复进行,这次用0.06 ETH重新填充了给予者合约,这是我们迄今为止使用的最高的支付,以确保较低的支付不是缺少Frontrunning尝试的原因。 交易费也被故意设定在一个相对较低的水平。交易等待了大约7分钟,但仍然成功提取了资金。 一个只允许所有者转发交易的自有代理的组合,阻止了两家Frontrunning者成功解析数据并为自己赚取利润。 可能只允许合约所有者执行调用的要求,或者资金被发送到与调用合约不同的目标的事实,有助于避免抢先尝试。 机器人很可能会首先考虑自我保护;毕竟,它们调用的是一个未知的合约,它可能执行任意代码。有理由认为,如果利润得不到保证,他们将避免不必要的风险或损失交易费用。 那么,我们赢了吗? 那要看你怎么看了。我们签了一份新合约,还有一个只有我们知道的秘密。很明显,我们发现的两家Frontrunning者都在交易池中操作所有的交易,从他们的利润来看,他们做得很好。 上次我们为什么能抵御(Frontrunning)? 很难说。可能是机器人没有冒着与经过身份验证的合约通信的风险,或者资金被转移到另一个地址的事实是意外的。当然,这并不意味着这是一种完全避免Frontrunning者的方法。最有可能的是,交易池l中潜伏着更复杂的机器人,它们根本不愿意为了这么小的利润而冒险。 (责任编辑:admin) |