Omniscia Steer Protocol Audit
AlgebraSinglePositionLiquidityManager Manual Review Findings
AlgebraSinglePositionLiquidityManager Manual Review Findings
ASP-01M: Inexistent Sanitization of Bin Configuration
Type | Severity | Location |
---|---|---|
Input Sanitization | AlgebraSinglePositionLiquidityManager.sol:L99, L101, L194-L200 |
Description:
The AlgebraSinglePositionLiquidityManager::tend
function will utilize the totalWeight
input argument to calculate the proportion of the contract's available balance to deposit to the Algebra
pool, however, the proportion is not restricted to be at most equal to 100% (1e4
).
As such, it is possible for a AlgebraSinglePositionLiquidityManager::tend
call to deposit more than the available balance of the contract, depositing pending fees which would cause all AlgebraBaseLiquidityManager::_getBalance0
and AlgebraBaseLiquidityManager::_getBalance1
function invocations to fail.
Impact:
It is possible for the vault to deposit more than its actual available balance as the weight of the AlgebraSinglePositionLiquidityManager::tend
call is not sanitized.
Example:
89uint256 balance0 = _getBalance0();90uint256 balance1 = _getBalance1();91
92emit Snapshot(sqrtPriceX96, balance0, balance1, totalSupply());93
94// Create new positions in Uniswap95if (totalWeight > 0) {96 _setBins(97 sqrtPriceX96,98 // balance0 adjusted by totalWeight99 FullMath.mulDiv(balance0, totalWeight, 1e4),100 // balance1 adjusted by totalWeight101 FullMath.mulDiv(balance1, totalWeight, 1e4),102 swapAmount103 );104}
Recommendation:
We advise the code to ensure that the totalWeight
is at most equal to 1e4
as otherwise, underflow errors would occur in the AlgebraBaseLiquidityManager::_getBalance0
and AlgebraBaseLiquidityManager::_getBalance1
functions.
Alleviation (0c3f85c7c11805ac412fe291f5681bef26da7244):
A require
check was introduced ensuring that the totalWeight
specified in an AlgebraSinglePositionLiquidityManager::tend
call is at most 100_00
thus alleviating this exhibit.