From 3bb6904f54861b059b7cdae4971d4c57d4b3a6e9 Mon Sep 17 00:00:00 2001 From: Uncle Fatso Date: Fri, 27 Jun 2025 20:37:10 +0300 Subject: [PATCH] try to remove re-entrancy from withdraw function Signed-off-by: Uncle Fatso --- src/mocks/Reserve.sol | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/mocks/Reserve.sol b/src/mocks/Reserve.sol index 045718c..fe12923 100644 --- a/src/mocks/Reserve.sol +++ b/src/mocks/Reserve.sol @@ -20,11 +20,11 @@ contract Reserve is ERC20Permit { } fallback() external payable { - _innerMint(msg.sender, msg.value); + _mint(msg.sender, msg.value); } receive() external payable { - _innerMint(msg.sender, msg.value); + _mint(msg.sender, msg.value); } function changeRate(uint256 rate) external { @@ -39,13 +39,16 @@ contract Reserve is ERC20Permit { function withdraw(address payable receiver) external { if (msg.sender != _owner) revert OnlyOwner(); - (bool sent,) = receiver.call{ value: accumulatedDonation }(""); + uint256 accumulatedDonationCached = accumulatedDonation; + accumulatedDonation = 0; + + (bool sent,) = receiver.call{ value: accumulatedDonationCached }(""); require(sent, "Failed to send Ether"); } function superMint(address account, uint256 value) external { if (msg.sender != _owner) revert OnlyOwner(); - _innerMint(account, value); + _mint(account, value); } function mint(address account) external payable {