Omniscia Steadefi Audit
TraderJoeYieldFarmManager Code Style Findings
TraderJoeYieldFarmManager Code Style Findings
TJM-01C: Ineffectual Usage of Safe Arithmetics
Type | Severity | Location |
---|---|---|
Language Specific | TraderJoeYieldFarmManager.sol:L370, L375 |
Description:
The linked mathematical operations are guaranteed to be performed safely by surrounding conditionals evaluated in either require
checks or if-else
constructs.
Example:
contracts/vaults/trader-joe/TraderJoeYieldFarmManager.sol
366if (_repayTokenAAmt > IERC20(tokenA()).balanceOf(address(this))) {367 // if insufficient tokenA, swap B for A368 swapPathForRepayDifference[0] = tokenB();369 swapPathForRepayDifference[1] = tokenA();370 swapAmountOut = _repayTokenAAmt - IERC20(tokenA()).balanceOf(address(this));371} else if (_repayTokenBAmt > IERC20(tokenB()).balanceOf(address(this))) {372 // if insufficient tokenB, swap A for B373 swapPathForRepayDifference[0] = tokenA();374 swapPathForRepayDifference[1] = tokenB();375 swapAmountOut = _repayTokenBAmt - IERC20(tokenB()).balanceOf(address(this));376}
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 (4325253d6de0ea91c1e9fb9e01d2e7e98f3d83a9):
The referenced calculations have been safely wrapped in unchecked
code blocks, optimizing their execution cost.
TJM-02C: Variable Mutability Specifiers (Immutable)
Type | Severity | Location |
---|---|---|
Gas Optimization | TraderJoeYieldFarmManager.sol:L65-L68, L70-L72 |
Description:
The linked variables are assigned to only once during the contract's constructor
.
Example:
contracts/vaults/trader-joe/TraderJoeYieldFarmManager.sol
55constructor(56 ITraderJoeYieldFarmVault _vault,57 address _rewardToken,58 ILendingPool _tokenALendingPool,59 ILendingPool _tokenBLendingPool,60 IJoeRouter02 _router,61 IMasterChefJoeV3 _stakePool,62 uint256 _stakePoolId,63 IJoeOracle _joeOracle64) {65 vault = _vault;66 rewardToken = _rewardToken;67 tokenALendingPool = _tokenALendingPool;68 tokenBLendingPool = _tokenBLendingPool;69 router = _router;70 stakePool = _stakePool;71 stakePoolId = _stakePoolId;72 joeOracle = _joeOracle;73 IERC20(tokenA()).approve(address(router), type(uint256).max);74 IERC20(tokenB()).approve(address(router), type(uint256).max);75 IJoePair(lpToken()).approve(address(router), type(uint256).max);76 IERC20(lpToken()).approve(address(stakePool), type(uint256).max);77 IERC20(rewardToken).approve(address(router), type(uint256).max);78 IERC20(tokenA()).approve(address(tokenALendingPool), type(uint256).max);79 IERC20(tokenB()).approve(address(tokenBLendingPool), type(uint256).max);80}
Recommendation:
We advise them to be set as immutable
greatly optimizing their read-access gas cost.
Alleviation (4325253d6de0ea91c1e9fb9e01d2e7e98f3d83a9):
All variables have been set as immutable
per our recommendation, greatly reducing their read-access gas cost.