Omniscia Gnosis Guild Audit

Packer Code Style Findings

Packer Code Style Findings

PRE-01C: Loop Iterator Optimizations

TypeSeverityLocation
Gas OptimizationPacker.sol:L23, L50

Description:

The linked for loops increment / decrement their iterator "safely" due to Solidity's built - in safe arithmetics (post-0.8.X).

Example:

packages/evm/contracts/packers/Packer.sol
23for (uint256 i; i < count; ++i) {

Recommendation:

We advise the increment / decrement operations to be performed in an unchecked code block as the last statement within each for loop to optimize their execution cost.

Alleviation:

The Gnosis Guild team considered this exhibit but has opted not to apply it to avoid broad usage of the unchecked paradigm. As such, we consider this exhibit acknowledged.

PRE-02C: Optimization of Array Iteration

TypeSeverityLocation
Gas OptimizationPacker.sol:L83-L85

Description:

As the Integrity::enforce function guarantees that the parent entries of the conditions array are defined in ascending order, it is possible to optimize the referenced comparison.

Example:

packages/evm/contracts/packers/Packer.sol
79} else {
80 uint256 length = conditions.length;
81 unchecked {
82 for (uint256 j = index + 1; j < length; ++j) {
83 if (conditions[j].parent != index) {
84 continue;
85 }
86 if (!_isInline(conditions, j)) {
87 return false;
88 }
89 }
90 }
91 return true;
92}

Recommendation:

We advise the code to perform a continue operation when conditions[j].parent < index and a break operation when conditions[j].parent > index, significantly optimizing the Packer::_isInline function's gas cost.

Alleviation:

The code was optimized per our recommendation, performing a continue or break operation based on the index by taking advantage of the conditions array's ascending order.