时间:2023-06-27|浏览:221
1. Akutars拍卖合约中有bid和processRefunds功能,用户可以进行拍卖出价和退款操作。
2. 在拍卖结束后,如果发起processRefunds退款操作,拍卖合约将遍历出价用户,并使用低级调用call为用户进行退款,但并没有限制这次调用的gasLimit。没有设置gasLimit的情况下,拍卖合约将使用发起者的全部gas进行外部调用。
3. 由于Akutars拍卖合约不限制合约参与拍卖,恶意用户可以使用合约参与拍卖,并在合约的接收以太函数中添加恶意消耗gas的逻辑。当进行退款流程时,触发该用户合约会恶意消耗调用发起者的全部gas,导致后续退款无法正常进行。
4. 幸运的是,这个恶意用户只是做了风险验证测试,并解除了恶意消耗gas的逻辑,使得退款可以继续顺利进行。当然,用户也可以在拍卖结束后的3天内进行紧急退款。
5. 在用户退款完成后,项目方可以通过claimProjectFunds功能提取合约中的拍卖所得。但拍卖合约在用户进行bid时使用totalBids和bidIndex记录用户的拍卖数量和出价次数。用户可以在一次出价中任意选择拍卖数量,因此在拍卖结束时,totalBids实际上会大于bidIndex。目前totalBids为5495,而bidIndex只有3669。
6. 但在claimProjectFunds函数中,却要求refundProgress退款数必须大于等于totalBids。项目方本意应为确保所有用户完成退款后才能取款。但实际上,refundProgress是根据出价人总数计算的,即使全部退款完成,refundProgress也只会等于bidIndex。这就导致refundProgress永远不会大于totalBids,最终导致合约中的11539.5枚ETH永远无法取出。
综上所述,即使用户无法退款的问题得到解决,由于出价人数和拍卖数量的计数不一致以及项目方取款函数的缺陷,Akutars的资金将被永久锁住。
文章来源:慢雾科技
用戶喜愛的交易所
已有账号登陆后会弹出下载