35 lines
904 B
Solidity
35 lines
904 B
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity >=0.8.4;
|
|
|
|
/// @notice Reentrancy protection for smart contracts.
|
|
/// @author z0r0z.eth
|
|
/// @author Modified from Seaport
|
|
/// (https://github.com/ProjectOpenSea/seaport/blob/main/contracts/lib/ReentrancyGuard.sol)
|
|
/// @author Modified from Solmate
|
|
/// (https://github.com/Rari-Capital/solmate/blob/main/src/utils/ReentrancyGuard.sol)
|
|
abstract contract ReentrancyGuard {
|
|
error Reentrancy();
|
|
|
|
uint256 private guard = 1;
|
|
|
|
modifier nonReentrant() virtual {
|
|
setReentrancyGuard();
|
|
|
|
_;
|
|
|
|
clearReentrancyGuard();
|
|
}
|
|
|
|
/// @dev Check guard sentinel value and set it.
|
|
function setReentrancyGuard() internal virtual {
|
|
if (guard == 2) revert Reentrancy();
|
|
|
|
guard = 2;
|
|
}
|
|
|
|
/// @dev Unset sentinel value.
|
|
function clearReentrancyGuard() internal virtual {
|
|
guard = 1;
|
|
}
|
|
}
|