Omniscia Sovryn Audit
BasketManager Code Style Findings
BasketManager Code Style Findings
BMR-01C: Redundant Mapping
Type | Severity | Location |
---|---|---|
Gas Optimization | Informational | BasketManager.sol:L11, L16, L30 |
Description:
The bassetsMap
mapping is solely utilized to guarantee no duplicate bassets are set during the contract's constructor
.
Example:
20constructor(address[] memory _bassets, int256[] memory _factors, address[] memory _bridges) public {21 require(_bassets.length > 0, "some basset required");22 require(_bassets.length == _factors.length, "factor array length mismatch");23 require(_bridges.length == _factors.length, "bridge array length mismatch");24
25 bassetsArray = _bassets;26 for(uint i=0; i<bassetsArray.length; i++) {27 address basset = bassetsArray[i];28 require(basset != address(0), "invalid basset address");29 require(!bassetsMap[basset], "basset not unique");30 bassetsMap[basset] = true;31 require(_factors[i] != 0, "invalid factor");32 factorMap[basset] = _factors[i];33 if(_bridges[i] != address(0)) {34 bridgeMap[basset] = _bridges[i];35 }36 }37}
Recommendation:
We advise the mapping
to be omitted and non-zero values of factorMap
to be utilized instead as a "flag" of whether a basset
has already been set.
Alleviation:
The development team has acknowledged this exhibit but decided to not apply its remediation in the current version of the codebase.
BMR-02C: Unutilized Quantity Values
Type | Severity | Location |
---|---|---|
Code Style | Informational | BasketManager.sol:L43-L49 |
Description:
The checkBasketBalanceForDeposit
and checkBasketBalanceForWithdrawal
functions do not utilize the "quantity" arguments during their validation.
Example:
43function checkBasketBalanceForDeposit(address _basset, uint256 _bassetQuantity) external view returns(bool) {44 return _isValidBasset(_basset);45}46
47function checkBasketBalanceForWithdrawal(address _basset, uint256 _bassetQuantity) external view returns(bool) {48 return _isValidBasset(_basset);49}
Recommendation:
As the current implementation is meant to be the first phase, we assume that the functions are declared as such to comply to a future upgrade that will utilize the quantities. In any case, we still recommend the names of the variables to be omitted thus producing the same signature but reducing the gas cost of the functions.
Alleviation:
The development team has acknowledged this exhibit but decided to not apply its remediation in the current version of the codebase.