0

只有修饰符 nonReentrant 足以防止重入,否则我们仍然需要检查函数内部是否成功

function withdraw() external nonReentrant {
 5        uint256 amount = balanceOf[msg.sender];
 6        balanceOf[msg.sender] = 0;
 7        (bool success, ) = msg.sender.call.value(amount)("");
 8        require(success, "Transfer failed.");
 9    }

或者这就足够了?:

function withdraw() external nonReentrant {
 5        uint256 amount = balanceOf[msg.sender];
 6        balanceOf[msg.sender] = 0;
 7        
 9    }
4

1 回答 1

0

第二个功能很好。只要在调用msg.sender.call之前将发件人的余额设置为 0,重入就不会成为问题。

于 2021-01-22T21:46:09.840 回答