Dibbler Code Style Findings
Dibbler Code Style Findings
DIB-01C: Code Duplication
| Type | Severity | Location |
|---|---|---|
| Gas Optimization | Dibbler.sol:L35-L39, L44-L48 |
Description:
The linked statements are identical.
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 them to be refactored to an internal or private function and utilized in their place.
Alleviation:
The contract's code has been relocated under the LibDibbler contract and the optimization advised has been properly applied.
DIB-02C: Conditional Reorder Optimization
| Type | Severity | Location |
|---|---|---|
| Gas Optimization | Dibbler.sol:L75-L78 |
Description:
The linked conditional should evaluate the direct comparisons first in order prior to the calculations performed on the first comparator to optimise gas cost in most cases.
Example:
74if (75 soilPercent <= C.getUpperBoundPodRate().mul(s.w.lastSoilPercent).asUint256() &&76 !s.w.didSowFaster &&77 s.w.lastSowTime != MAX_UINT32 &&78 s.w.lastDSoil != 079) {
Recommendation:
We advise the comparisons to be re-ordered as advised.
Alleviation:
The contract's code has been relocated under the LibDibbler contract and now properly validates the simple conditionals instead of the percentage calculations optimizing the codebase.
DIB-03C: Deprecated Representation Style
| Type | Severity | Location |
|---|---|---|
| Code Style | Dibbler.sol:L24 |
Description:
The linked code contains the representation of the maximum value of a uint32 in the 2**32 - 1 format which has been officially deprecated and no longer compiles in recent pragma versions.
Example:
24uint32 private constant MAX_UINT32 = 2**32-1;
Recommendation:
We advise the type(uint32).max standardised representational style to be utilised instead.
Alleviation:
The contract's code has been relocated under the LibDibbler contract and the literal has been omitted from the codebase with all its instances replaced by the type(uint32).max representation style alleviating this exhibit.