Vulnerability
閱讀平衡問題
以下程式碼顯示了余額的讀取:
function WithdrawBuggy(uint256 amount) public { uint256 bal = balance[msg.sender]; require(amount <= bal); balance[msg.sender] -= amount; require(msg.sender.call.value(amount)()); if (balance[msg.sender] != bal) { emit BalanceDecreased(msg.sender); } }
攻擊者可以利用餘額讀取嗎?
祖爾菲。
當呼叫者是智能合約時,如果它可以重新進入
BuggyWithdraw
並且可以更改balance[msg.sender]
,那麼它可能BalanceDecreased
永遠不會發出。因此,依賴該事件的鏈下服務可能不會考慮餘額已減少。