Omniscia 0xPhase Audit
ERC20VotesUpgradeable Code Style Findings
ERC20VotesUpgradeable Code Style Findings
ERV-01C: Ineffectual Usage of Safe Arithmetics
| Type | Severity | Location |
|---|---|---|
| Language Specific | ![]() | ERC20VotesUpgradeable.sol:L101, L234, L237-L238, L279 |
Description:
The linked mathematical operations are guaranteed to be performed safely by surrounding conditionals evaluated in either require checks or if-else constructs.
Example:
97function getVotes(98 address account99) public view virtual override returns (uint256) {100 uint256 pos = _checkpoints[account].length;101 return pos == 0 ? 0 : _checkpoints[account][pos - 1].votes;102}Recommendation:
Given that safe arithmetics are toggled on by default in pragma versions of 0.8.X, we advise the linked statements to be wrapped in unchecked code blocks thereby optimizing their execution cost.
Alleviation (3dd3d7bf0c2693b2f9c23bacedfa420393f7ea84):
All referenced arithmetic statements have been optimally wrapped in unchecked code blocks safely, addressing this exhibit.
ERV-02C: Redundant In-Memory Variable
| Type | Severity | Location |
|---|---|---|
| Gas Optimization | ![]() | ERC20VotesUpgradeable.sol:L55, L57 |
Description:
The referenced success variable is declared and utilized in the immediate ensuing statement.
Example:
55bool success = SignatureChecker.isValidSignatureNow(delegator, hash, sig);56
57require(success, "ERC20VotesUpgradeable: invalid signature");Recommendation:
We advise the function invocation itself to be performed within the require check, rendering the local success variable redundant.
Alleviation (3dd3d7bf0c2693b2f9c23bacedfa420393f7ea84):
The SignatureChecker::isValidSignatureNow function is directly evaluated within the require check referenced, optimizing the code's gas cost.
