Omniscia Steer Protocol Audit
SingleStaking Code Style Findings
SingleStaking Code Style Findings
SSG-01C: Inefficient Code Structure
Type | Severity | Location |
---|---|---|
Gas Optimization | SingleStaking.sol:L714-L725 |
Description:
The referenced if-else
block within the StakingSingleRewards::withdraw
function will repeat the same statements across the code branches except for a single require
check.
Example:
714if (isLocked) {715 require(block.timestamp > periodFinish, "Period is not finished");716 _totalSupply = _totalSupply.sub(amount);717 _balances[msg.sender] = _balances[msg.sender].sub(amount);718 stakingToken.safeTransfer(msg.sender, amount);719 emit Withdrawn(msg.sender, amount);720} else {721 _totalSupply = _totalSupply.sub(amount);722 _balances[msg.sender] = _balances[msg.sender].sub(amount);723 stakingToken.safeTransfer(msg.sender, amount);724 emit Withdrawn(msg.sender, amount);725}
Recommendation:
We advise the code to instead perform the require
check within the existing if
clause, the else
clause to be removed, and the remaining statements in the if
clause to be relocated outside of it and specifically after it.
Alleviation (6513a21a002d422e298719b22f73a4559dfd4663):
The code was optimized per our recommendation, significantly reducing the bytecode size of the contract.
SSG-02C: Repetitive Value Literal
Type | Severity | Location |
---|---|---|
Code Style | SingleStaking.sol:L680, L689 |
Description:
The linked value literal is repeated across the codebase multiple times.
Example:
680.mul(1e18)
Recommendation:
We advise it to be set to a constant
variable instead, optimizing the legibility of the codebase.
In case the constant
has already been declared, we advise it to be properly re-used across the code.
Alleviation (6513a21a002d422e298719b22f73a4559dfd4663):
The referenced value literal PRECISION
has been properly relocated to a contract-level constant
declaration labelled 1e18
, optimizing the code's legibility.