BGLD 通缩代币漏洞分析
https://twitter.com/BlockSecTeam/status/1602335214356660225
攻击交易: 0xea108fe94bfc9a71bb3e4dee4a1b0fd47572e6ad6aba8b2155ac44861be628ae 攻击合约:0x56b2b04e5cea5274fc5f79d648ea7da739a50b41 攻击账号:0xf4fd2ebe7196c8e99e88bcc4aef69dda0e493b8f 被攻击合约:0x7526-Cake-LP 0x7526cc9121ba716cec288af155d110587e55df8b 0x4293-Cake-LP 0x429339fa7a2f2979657b25ed49d64d4b98a2050d
通常调用ERC20代币合约的transfer方法转账时,不会损失任何代币。但是若代币转移过程中,将发送方的代币按照一定比例消耗,将可能会对池子中的代币数量产生影响,进而影响价格。 查看交易过程,可以发现攻击者调用了池子的skim方法后,池子中的0xc231-BGLD代币数量急剧减少,势必引发价格失衡,既可以使用少量的BGLD代币即可兑换出大量的WBNB代币。
那为什么攻击者要调用池子的skim方法呢?又是怎么引起池子中的BGLD代币急剧减少的呢?原因在于BGLD是一种通缩代币,会将发送方待转移的BGLD代币按照一定比例减少,最终导致发送方的BGLD持有量减少。如果持有方是池子,即可实现减少池子中的BGLD代币的目的。
具体的攻击步骤: 1) 攻击者先给池子转移一笔BGLD代币,再调用池子的skim函数,因为此时池子中的BGLD代币超过reserver数量,池子将会调用BGLD代币的transfer方法将多余的代币发送指定接受方:
2) BGLD代币将会按照比例burn发送方的持有量,最终导致池子中的BGLD代币数量急剧减少,价格失衡:
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!