Since refunds are capped to a percentage of the total transaction's gas, it is best to keep them low, to increase the likelihood of the full refund coming into effect.
Therefore, switching between 1, 2 instead of false (0), true (1) will be more gas efficient.
Handle
WatchPug
Vulnerability details
The current implementation of
auctionOngoing
is switching between true and false.SSTORE
from false (0) to true (1) (or any non-zero value), the cost is 20000;SSTORE
from 1 to 2 (or any other non-zero value), the cost is 5000.By storing the original value once again, a refund is triggered (https://eips.ethereum.org/EIPS/eip-2200).
Since refunds are capped to a percentage of the total transaction's gas, it is best to keep them low, to increase the likelihood of the full refund coming into effect.
Therefore, switching between 1, 2 instead of false (0), true (1) will be more gas efficient.
See: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/86bd4d73896afcb35a205456e361436701823c7a/contracts/security/ReentrancyGuard.sol#L29-L33
Recommendation
Change to: