Omniscia Euler Finance Audit
SwapHandlerCombinedBase Code Style Findings
SwapHandlerCombinedBase Code Style Findings
SHC-01C: Illegible Value Literal
Type | Severity | Location |
---|---|---|
Code Style | SwapHandlerCombinedBase.sol:L31 |
Description:
The 20 + (20 * 23)
literal should be represented via a contract-level constant
variable that is utilized in the require
statement thus optimizing its gas cost.
Example:
31require(path.length >= 40 && path.length < 20 + (20 * 23), "SwapHandlerPayloadBase: secondary path format");
Recommendation:
We advise this to be done so increasing the legibility of the codebase and potentially optimizing the require
path evaluation cost depending on the Solidity compiler utilized.
Alleviation:
The Euler Finance team opted to retain the literals in place as they did not observe a change in the final gas cost of the function, however, they have significantly increased the comments surrounding the require
check to properly describe what the literal values represent. As a result, we consider this exhibit adequately addressed.
SHC-02C: Ineffectual Usage of Safe Arithmetics
Type | Severity | Location |
---|---|---|
Language Specific | SwapHandlerCombinedBase.sol:L75, L76 |
Description:
The linked mathematical operation is guaranteed to be performed safely by surrounding conditionals evaluated in either require
checks or if-else
constructs.
Example:
75for(uint i; i < addressPathSize; ++i) {76 addressPath[i] = toAddress(path, i * 20);77}
Recommendation:
Given that safe arithmetics are toggled on by default in pragma
versions of 0.8.X
, we advise the linked statement to be wrapped in an unchecked
code block thereby optimizing its execution cost.
Alleviation:
The for
loop including the iterator increment and the iterator multiplication within the statement of the for
loop has been wrapped in an unchecked
directive thus alleviating this exhibit in full.