支付 可以很 ____■闪贷:为什么闪贷攻击会是新常态?( 四 )


显然 , 这会带来巨大的UX权衡:它意味着交易不再是同步的 。 它对普通用户来说极其糟糕 , 这是很难下决心采取的措施 。 (蓝狐笔记:为了防止闪贷攻击 , 导致用户体验糟糕 , 显然是下策)
很多开发者对异步智能合约操作感到烦恼 , 例如 , 与layer 2的交互 , 以及以太坊2.0的跨分片通信 。 具有讽刺意味的是 , 异步其实让这些系统在应对闪贷时更安全 , 因为你无法在单个原子交易中横跨分片或layer 2 。 这意味着不会有跨ETH2.0分片或在layer 2针对DEX的闪贷攻击 。

  • 要求提供链上证明 , 以证明用户的先前余额并没有因为闪贷而改变
如果能有方法检测出用户真实的余额多少(也就是他们获得借款之前的余额) , 我们就可以击败闪贷攻击 。
无法在EVM中本地执行此操作 , 不过 , 你可以做点带有黑客意味的事情 。 这就是你要做的:
在用户与你的协议交互之前 , 你要求提供可以证明之前区块末尾的Merkle证明 , 他们有足够的余额来解释他们当前使用的资金 。 你需要对每个区块上的每位用户跟踪这一点 。 (Ari Juels向我概述了此方法)
这种方法可能有些效果 。 当然 , 它也存在棘手问题:在链上验证这些链上证明非常昂贵 , 并且没有用户会想要生成这些证明以及为此支付gas费用 。 另外 , 出于完全正当理由 , 用户有可能在早些时候在同一区块中已更改了余额 。 因此 , 从理论上它有一些优点 , 但这不是一个切实的解决方案 。
以上提到的三个解决方案没有一个有特别的希望 。 我相信 , 没有针对闪贷攻击的全面防御措施 。 但是 , 有两个特定的应用确实可以缓解闪贷攻击:基于市场价格的预言机和治理代币 。
对于像Uniswap或OasisDEX这样的基于市场的价格预言机 , 闪贷攻击使得你在任何情况下都不能将当前的中间市场价格用作为预言机 。 对于攻击者来说 , 在单个交易中移动中间市场价格并制造闪崩、破坏价格预言机 , 这是孩子的玩法 。
这里最好的解决方案是通过TWAP或VWAP使用最后X个区块的加权平均值 。 Uniswap v2将原生提供这一点 。 还有Polaris , 这是通用的方法 , 可以为DeFi协议提供移动平均值 。 具有讽刺意味的是 , Polaris也是由Marble的创始人Max Wolff构建的 。 (Polaris现在已经被抛弃 , 但Max看到了这一角落的东西 , 值得赞)
链上治理本身就是自己罐头里的蠕虫 。 链上治理通常由治理代币持有者之间的代币加权投票决定 。 但是 , 如果这些治理代币出现在闪贷借贷池中 , 那么 , 任何攻击者可以捡起大量的治理代币并搞出任何他们想要的结果 。
当然 , 大多数治理协议都要求在投票期间锁定这些代币 , 以防止闪贷攻击 。 但是 , 有些形式的投票并不要求这些 , 例如carbon投票 , 或Maker的执行合约 。 如今 , 随着闪贷攻击的出现 , 这些形式的投票应该认为完全遭到破坏 。
理想情况下 , 如果治理代币不可用来闪贷 , 这就很好 。 但是 , 这不取决于代币的发行方 , 而是取决于市场 。 因此 , 所有治理行为应该要求锁定 , 以防止闪贷攻击 。 Compound的新COMP代币更进一步 , 它对所有协议投票都要求基于时间的加权 , 甚至削弱针对其治理代币的常规贷款攻击 。
更广泛地说 , 所有治理代币必须有时间锁 。 时间锁要求所有治理决定必须等待一段时间才能生效(Compound的时间锁是两天) 。 这使得系统可以从任何意料之外的治理攻击中恢复 。 尽管MKR还无法被大量闪贷 , MakerDAO最近因为易受此类攻击而被号召实施措施 。 它最近实施了24小时的时间锁 , 关闭了此类攻击向量 。
从长远看 , 这一切意味着什么?
我相信bZx攻击改变了这一切 。
这不会是最后一次闪贷攻击 。 第二次bZx攻击是对第一次的模仿 , 而且我怀疑在未来几个月会掀起一波攻击浪潮 。 现在 , 来自世界最遥远角落的成千上万名聪明少年正在嘲笑所有这些DeFi乐高 , 他们在显微镜下观察 , 试图发现可以实施闪贷攻击的方法 。 如果他们设法成功利用漏洞 , 那么 , 他们就可以赚取几十万美元 , 这在世界上的大部分地区都是可以明显改变生活的 。


推荐阅读