Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
O
openzeppelin-contracts-upgradeable
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
俞永鹏
openzeppelin-contracts-upgradeable
Commits
1200969e
Commit
1200969e
authored
Jul 28, 2018
by
Alex
Committed by
Nicolás Venturo
Jul 27, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Refactor/reentrancy guard gas optimization #1056 (#1057)
* optimizing ReentrancyGuard gas usage * style fixed
parent
90b98a7b
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
12 additions
and
5 deletions
+12
-5
ReentrancyGuard.sol
contracts/ReentrancyGuard.sol
+12
-5
No files found.
contracts/ReentrancyGuard.sol
View file @
1200969e
...
...
@@ -3,16 +3,23 @@ pragma solidity ^0.4.24;
/**
* @title Helps contracts guard against reentrancy attacks.
* @author Remco Bloemen <remco@2π.com>
* @author Remco Bloemen <remco@2π.com>
, Eenae <alexey@mixbytes.io>
* @dev If you mark a function `nonReentrant`, you should also
* mark it `external`.
*/
contract ReentrancyGuard {
/// @dev Constant for unlocked guard state - non-zero to prevent extra gas costs.
/// See: https://github.com/OpenZeppelin/openzeppelin-solidity/issues/1056
uint private constant REENTRANCY_GUARD_FREE = 1;
/// @dev Constant for locked guard state
uint private constant REENTRANCY_GUARD_LOCKED = 2;
/**
* @dev We use a single lock for the whole contract.
*/
bool private reentrancyLock = false
;
uint private reentrancyLock = REENTRANCY_GUARD_FREE
;
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
...
...
@@ -23,10 +30,10 @@ contract ReentrancyGuard {
* wrapper marked as `nonReentrant`.
*/
modifier nonReentrant() {
require(
!reentrancyLock
);
reentrancyLock =
true
;
require(
reentrancyLock == REENTRANCY_GUARD_FREE
);
reentrancyLock =
REENTRANCY_GUARD_LOCKED
;
_;
reentrancyLock =
false
;
reentrancyLock =
REENTRANCY_GUARD_FREE
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment