1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- // SPDX-License-Identifier: MIT
- pragma solidity ^0.8.19;
- import "../security/ReentrancyGuard.sol";
- import "./ReentrancyAttack.sol";
- contract ReentrancyMock is ReentrancyGuard {
- uint256 public counter;
- constructor() {
- counter = 0;
- }
- function callback() external nonReentrant {
- _count();
- }
- function countLocalRecursive(uint256 n) public nonReentrant {
- if (n > 0) {
- _count();
- countLocalRecursive(n - 1);
- }
- }
- function countThisRecursive(uint256 n) public nonReentrant {
- if (n > 0) {
- _count();
- (bool success, ) = address(this).call(abi.encodeCall(this.countThisRecursive, (n - 1)));
- require(success, "ReentrancyMock: failed call");
- }
- }
- function countAndCall(ReentrancyAttack attacker) public nonReentrant {
- _count();
- attacker.callSender(abi.encodeCall(this.callback, ()));
- }
- function _count() private {
- counter += 1;
- }
- function guardedCheckEntered() public nonReentrant {
- require(_reentrancyGuardEntered());
- }
- function unguardedCheckNotEntered() public view {
- require(!_reentrancyGuardEntered());
- }
- }
|