Bip Code Style Findings

Bip Code Style Findings

BIP-01C: Inefficient Assignment of Array

Type Severity Location
Gas Optimization Bip.sol:L94, L95

Description:

The linked code is meant to assign all values of the input array to the storage array by pushing each element.

Example:

protocol/contracts/farm/facets/GovernanceFacet/Bip.sol
94for (uint i = 0; i < _diamondCut.length; i++)
95 s.g.diamondCuts[bipId].diamondCut.push(_diamondCut[i]);

Recommendation:

We advise the assignment to be performed directly as it is more optimal.

Alleviation:

After discussion with the Beanstalk team, we concluded that this type of optimization is not applicable in the compiler version they utilize and as such we consider this exhibit nullified.

BIP-02C: Inefficient Length Evaluation

Type Severity Location
Gas Optimization Bip.sol:L107

Description:

The linked code reads the length member of an array from storage twice redundantly.

Example:

protocol/contracts/farm/facets/GovernanceFacet/Bip.sol
107if (i < s.g.activeBips.length-1) s.g.activeBips[i] = s.g.activeBips[s.g.activeBips.length-1];

Recommendation:

We advise the value to be stored to an in-memory variable reducing the SLOAD operations to 1 instead of 2.

Alleviation:

The length evaluation is now properly cached to a local variable prior to being utilized.

View Fix on GitHub
Navigated to Bip Code Style Findings