作为一名前 CoinDesk 编辑、现在在 Meme Insider 深入研究 meme 代币世界的人,我见过不少加密领域的事故。但最近的 Bunni 漏洞真正印证了 @0xngmi 的这条推文:写智能合约非常残酷。Bunni 是建立在 Uniswap v4 上、旨在提高流动性提供者收益的可变形 DEX,它因为看似无害的舍入错误遭受了约 840 万美元的攻击。下面用通俗的语言拆解事件,探讨出错原因,并讨论这对更广泛的 DeFi 和 meme 代币生态意味着什么。
Bunni 漏洞究竟发生了什么?
Bunni 在 他们的更新线程 中宣布了该漏洞,并分享了详细的事后分析。攻击影响了两个池:Unichain 上的 weETH/ETH 和 Ethereum 上的 USDC/USDT。攻击者通过巧妙使用 flashloan、极小的提现以及夹击(sandwich)攻击,操纵池的流动性感知,最终带走了数百万资产。
以下是攻击者根据 官方事后分析 使用的逐步操作手法:
闪电贷与价格操纵:攻击者通过 flashloan 借入大量资金(比如 300 万 USDT)并将其换入池中,把价格推高。结果让 active balance(用于 swaps 的那部分池余额)极度偏低,例如降到仅 28 wei 的 USDC 水平。
利用微小提现:接下来是狡猾的一步。攻击者进行了 44 次极小的提现。每一次提现都会触发一个舍入错误,使得池的感知流动性被削弱得远比应有的更多。总流动性因此下降了大约 84%,让池觉得自己持有的资产远低于实际情况。
夹击获利:在流动性被人为压低的情况下,攻击者执行了一笔大额 swap,造成对他们有利的巨大价格滑点。随后进行另一笔换出以兑现,偿还 flashloan,并把利润装袋——大约 133 万 USDC 和 100 万 USDT。
有趣的是,最大的 Bunni 池(Unichain 上的 USDC/USD₮0)幸免于难,因为当时没有足够的 flashloan 流动性来完成第一步操作。
根本原因:一个棘手的舍入错误
这起灾难的核心是 Bunni 智能合约代码中的一个舍入选择。在 DeFi 中,由于智能合约处理的是整数(整型),除法通常会留下余数,因此会出现舍入问题。开发者必须决定向上舍入还是向下舍入,而这个选择可能决定安全性。
在 Bunni 的 withdraw() 函数中,代码以一种本意是偏向池的方式进行了舍入——让闲置余额看起来略低,从而增加 swap 时的价格冲击,提升 LP 的收益。但当这种舍入与多次操作叠加时,就会产生反作用。
以下是事后分析中展示的问题代码片段:
其中一行 newBalance = balance - balance.mulDiv(shares, currentTotalSupply)
使用了向下舍入的 mulDiv,这会把被减去的数量向下舍入。这样一来,新的 idle balance 会向上取整,而 active balance(留下用于 swaps 的那部分)会向下舍入。单次看起来好像没问题,但在多次极小提现的重复作用下,这些误差会叠加,攻击者就能通过操纵池的状态抽取价值。
早期在 X 上的分析(例如 这篇 和 另一篇)把锅甩给了 Bunni 独特的再平衡特性,但团队澄清事实并非如此——在攻击期间并没有发生再平衡操作。
影响与响应
这次攻击共计被抽走约 840 万美元,但 Bunni 反应迅速。他们暂停了大部分操作,仅保留提现功能,允许 LP 安全提款。团队还与像 Cyfrin 这样的审计方(参见他们的 详细 gist)以及其他机构合作分析并修复问题。
对用户而言,这是一个警钟:始终检查协议审计情况,并理解提供流动性,尤其是在像 Uniswap v4 hooks 这样的新设置中所伴随的风险。
对 DeFi 和 Meme 代币的教训
这个漏洞不只是 Bunni 的故事——它是对整个区块链领域的警示,尤其是依赖 DEX 提供流动性的 meme 代币创造者。meme 代币常在像 Uniswap 这样的平台上启动,类似的漏洞可能在一夜之间摧毁整个社区。
关键要点:
舍入很重要:始终考虑舍入在多步骤攻击中的表现。要么始终偏向用户,要么始终偏向协议,但无论选择哪种策略,都要测试其累积效应。
审计并非万无一失:Bunni 有审计,但像这样的边缘情况仍然可能被忽略。应结合多家审计并使用形式化验证工具,例如 Certora 提供的工具。
Flashloan 风险:这类工具既能推动创新,也能被用来发动攻击。协议设计应把原子性(atomic operations)纳入考量。
社区透明度:Bunni 的快速事后分析和允许提现的举措建立了信任。meme 代币项目也应效仿——诚实能维持社区的凝聚力。
在 meme 代币的世界里,炒作能驱动巨大的流动性池,理解这些技术陷阱至关重要。它能帮助开发者打造更安全的上线方案,也让交易者更早识别风险信号。
Bunni 表示会继续发展建设,有了这样的教训,DeFi 会更强大。如果你正在为下一个 meme coin 调试智能合约,记住 @0xngmi 的话:外面很残酷。保持警惕、反复测试,并且别以会反噬你的方式进行舍入。