時(shí)間:2023-06-27|瀏覽:257
1. Akutars拍賣(mài)合約中有bid和processRefunds功能,用戶可以進(jìn)行拍賣(mài)出價(jià)和退款操作。
2. 在拍賣(mài)結(jié)束后,如果發(fā)起processRefunds退款操作,拍賣(mài)合約將遍歷出價(jià)用戶,并使用低級(jí)調(diào)用call為用戶進(jìn)行退款,但并沒(méi)有限制這次調(diào)用的gasLimit。沒(méi)有設(shè)置gasLimit的情況下,拍賣(mài)合約將使用發(fā)起者的全部gas進(jìn)行外部調(diào)用。
3. 由于Akutars拍賣(mài)合約不限制合約參與拍賣(mài),惡意用戶可以使用合約參與拍賣(mài),并在合約的接收以太函數(shù)中添加惡意消耗gas的邏輯。當(dāng)進(jìn)行退款流程時(shí),觸發(fā)該用戶合約會(huì)惡意消耗調(diào)用發(fā)起者的全部gas,導(dǎo)致后續(xù)退款無(wú)法正常進(jìn)行。
4. 幸運(yùn)的是,這個(gè)惡意用戶只是做了風(fēng)險(xiǎn)驗(yàn)證測(cè)試,并解除了惡意消耗gas的邏輯,使得退款可以繼續(xù)順利進(jìn)行。當(dāng)然,用戶也可以在拍賣(mài)結(jié)束后的3天內(nèi)進(jìn)行緊急退款。
5. 在用戶退款完成后,項(xiàng)目方可以通過(guò)claimProjectFunds功能提取合約中的拍賣(mài)所得。但拍賣(mài)合約在用戶進(jìn)行bid時(shí)使用totalBids和bidIndex記錄用戶的拍賣(mài)數(shù)量和出價(jià)次數(shù)。用戶可以在一次出價(jià)中任意選擇拍賣(mài)數(shù)量,因此在拍賣(mài)結(jié)束時(shí),totalBids實(shí)際上會(huì)大于bidIndex。目前totalBids為5495,而bidIndex只有3669。
6. 但在claimProjectFunds函數(shù)中,卻要求refundProgress退款數(shù)必須大于等于totalBids。項(xiàng)目方本意應(yīng)為確保所有用戶完成退款后才能取款。但實(shí)際上,refundProgress是根據(jù)出價(jià)人總數(shù)計(jì)算的,即使全部退款完成,refundProgress也只會(huì)等于bidIndex。這就導(dǎo)致refundProgress永遠(yuǎn)不會(huì)大于totalBids,最終導(dǎo)致合約中的11539.5枚ETH永遠(yuǎn)無(wú)法取出。
綜上所述,即使用戶無(wú)法退款的問(wèn)題得到解決,由于出價(jià)人數(shù)和拍賣(mài)數(shù)量的計(jì)數(shù)不一致以及項(xiàng)目方取款函數(shù)的缺陷,Akutars的資金將被永久鎖住。
文章來(lái)源:慢霧科技
熱點(diǎn):NFT nft項(xiàng)目 項(xiàng)目