CertiK:YamFinance智能合约漏洞事件分析一落云就开始疯狂涌入。短短8小时,YamFinance锁定的总价值超过2亿美元。COMP挖矿带动DeFi行业出圈,YAM直接带动DeFi头部项目集体崛起,堪称“一飞冲天”。然而,短短36个小时,高楼拔地而起。几亿美元因为一个小漏洞就消失了。我以为我反应迟钝,亏了一个亿,没想到我的五块钱保住了。善良的小红薯,你忍受了什么?事件背景8月12日,YAMFinance官方宣布他们发现了一个智能合约漏洞,并表示该漏洞会产生比最初设定数量更多的YAM代币。在这种情况下,大量保留的代币会产生治理操作所需的过多代币。这意味着社区将没有足够的代币来执行未来的任何治理操作。智能合约漏洞出现在哪里?该漏洞出现在YAM项目智能合约YAM.sol的rebase函数中,如下图所示:图片来源:https://github.com/yam-finance/yam-protocol/blob/767e3a4a6918b6fb6100ad6bb356164408f5d82f/contracts/token/YAM.sol#L340上图中的变基函数应该执行变基以保持价格稳定。但是有一行代码(蓝色标记)在计算totalSupply时给出了错误的结果,导致系统预留了过多的代币。这行代码正确的代码/公式计算形式应该类似于下面的代码/公式:totalSupply=initSupply.mul(yamsScalingFactor).div(BASE);那么是否有可能在截止日期前通过治理行动修复这个漏洞?第二次调整时间为美国东部时间8月13日凌晨4点。YAMFinance公开宣布,他们需要在美国东部时间凌晨3:00之前收到约160,000个YAM委托请求,才能提交治理提案。如果在投票窗口期间委托了超过400,000个YAM,该提案将允许用户自己将YAM转移或存入储备池。好消息是,YAM得到了社区的大力支持,提案已经成功提交。然而,新提交的提案无法在智能合约中运行,因此YAM仍处于难以管理的状态。YAM现状YAMFinance已失去治理能力,其75%的流动性已从YAM/yCRV未分配资金池中撤出。但是,剩余的流动性将从储备池中移除。据官方消息,Gate.io将捐赠YAMGitcoin,捐赠资金将用于审计YAM合约。审核完成后,YAM合约将迁移至YAM2.0。如何避免?所有的区块链项目不仅需要在正式发布前使用严格的软件测试工具验证项目的代码安全性,还应该邀请多个第三方区块链安全团队做好区块链项目代码的验证审计并在每次代码更新后重新审核。从而设计出更好的项目管理系统,为紧急项目更新的需要做准备。我们不只是寻找漏洞,而是要杜绝哪怕是0.00000001%被攻击的可能性。
