Omniscia Olympus DAO Audit
ERC20Permit Code Style Findings
ERC20Permit Code Style Findings
ERP-01C: Improper Error Name
Type | Severity | Location |
---|---|---|
Code Style | Informational | ERC20Permit.sol:L56 |
Description:
The error name references another contract that does not exist in the codebase.
Example:
56require(signer != address(0) && signer == owner, "ZeroSwapPermit: Invalid signature");
Recommendation:
We advise the error to be renamed.
Alleviation:
The error message has been corrected to utilize the contract's name instead.
ERP-02C: Redundant Visibility Specifiers
Type | Severity | Location |
---|---|---|
Gas Optimization | Informational | ERC20Permit.sol:L15, L17 |
Description:
The linked variables are meant to be internally available constant
variables.
Example:
14// keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");15bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;16
17bytes32 public DOMAIN_SEPARATOR;
Recommendation:
We advise them to be set as private
or internal
to reduce the codebase bloat and bytecode size of the contract.
Alleviation:
Visibility specifiers were adjusted for both variables to ensure they are no longer exposed publicly.
ERP-03C: Suboptimal Code Style
Type | Severity | Location |
---|---|---|
Code Style | Informational | ERC20Permit.sol:L14, L15 |
Description:
The PERMIT_TYPEHASH
variable has the hash declared as its assignment and the keccak256
instruction as its comment.
Example:
14// keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");15bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
Recommendation:
We advise these to be reversed as the one-way association of keccak256
is not guaranteed from a hash to its value but rather from a value to its hash. Additionally, validation of the values would have less implications as the keccak256
instruction is guaranteed to be performed properly. To note, assigning a constant
to a keccak256
instruction's result does not affect gas cost as the value is pre-calculated by the compiler.
Alleviation:
The typehash is now properly assigned to the evaluation of a keccak256
instruction and is set as immutable
to benefit from the gas optimization of evaluating the expression once.