Omniscia Beanstalk Audit
Dibbler Manual Review Findings
Dibbler Manual Review Findings
DIB-01M: Unsafe Down-Casting
Type | Severity | Location |
---|---|---|
Mathematical Operations | Dibbler.sol:L71 |
Description:
The linked down-casting to a uint96
is performed unsafely.
Example:
71uint96 soilPercent = uint96(s.f.soil.mul(1e18).div(totalBeanSupply));
Recommendation:
We advise the down-casting to be performed safely as it can truncate in case the evaluation s.f.soil.mul(1e18).div(totalBeanSupply)
exceeds the maximum of a uint96
which has up to ~7.922e28
precision.
Alleviation:
The contract's code has been relocated under the LibDibbler
contract and no longer downcasts thereby alleviating this exhibit.
DIB-02M: Redundantly Preemptive Amount Evaluation
Type | Severity | Location |
---|---|---|
Input Sanitization | Dibbler.sol:L33, L43 |
Description:
The linked require
checks validate that a non-zero amount has been purchased, however, this check does not guarantee that the pods
that will be sowed are non-zero.
Example:
32function _sow(uint256 amount, address account) internal returns (uint256) {33 require(amount > 0, "Field: Must purchase non-zero amount.");34 s.f.soil = s.f.soil.sub(amount, "Field: Not enough outstanding Soil.");35 uint256 pods = beansToPods(amount, s.w.yield);36 sowPlot(account, amount, pods);37 s.f.pods = s.f.pods.add(pods);38 saveSowTime();39 return pods;40}41
42function _sowNoSoil(uint256 amount, address account) internal returns (uint256) {43 require(amount > 0, "Field: Must purchase non-zero amount.");44 uint256 pods = beansToPods(amount, s.w.yield);45 sowPlot(account, amount, pods);46 s.f.pods = s.f.pods.add(pods);47 saveSowTime();48 return pods;49}
Recommendation:
We advise the check to be relocated and to evaluate the pods
value instead, indirectly ensuring a non-zero amount
and guaranteeing a proper pods
update.
Alleviation:
The contract's code has been relocated under the LibDibbler
contract and now the pods
that are converted are validated to be non-zero instead thereby alleviating this exhibit.