22 lines
1.0 KiB
Solidity
22 lines
1.0 KiB
Solidity
pragma solidity 0.4.24;
|
|
|
|
contract ReentrancyGuard {
|
|
function lock() internal returns (bool res) {
|
|
assembly {
|
|
// Even though this is not the same as boolStorage[keccak256(abi.encodePacked("lock"))],
|
|
// since solidity mapping introduces another level of addressing, such slot change is safe
|
|
// for temporary variables which are cleared at the end of the call execution.
|
|
res := sload(0x6168652c307c1e813ca11cfb3a601f1cf3b22452021a5052d8b05f1f1f8a3e92) // keccak256(abi.encodePacked("lock"))
|
|
}
|
|
}
|
|
|
|
function setLock(bool _lock) internal {
|
|
assembly {
|
|
// Even though this is not the same as boolStorage[keccak256(abi.encodePacked("lock"))],
|
|
// since solidity mapping introduces another level of addressing, such slot change is safe
|
|
// for temporary variables which are cleared at the end of the call execution.
|
|
sstore(0x6168652c307c1e813ca11cfb3a601f1cf3b22452021a5052d8b05f1f1f8a3e92, _lock) // keccak256(abi.encodePacked("lock"))
|
|
}
|
|
}
|
|
}
|