Omniscia Arcade XYZ Audit
ArcadeItemsVerifier Code Style Findings
ArcadeItemsVerifier Code Style Findings
AIV-01C: Loop Iterator Optimization
Type | Severity | Location |
---|---|---|
Gas Optimization | ![]() | ArcadeItemsVerifier.sol:L102 |
Description:
The linked for
loop increments / decrements the iterator "safely" due to Solidity's built-in safe arithmetics (post-0.8.X
).
Example:
102for (uint256 i = 0; i < items.length; i++) {
Recommendation:
We advise the increment / decrement operation to be performed in an unchecked
code block as the last statement within the for
loop to optimize its execution cost.
Alleviation (7a4e1dc948e94ded7385dbb74818bcf93ecc207c):
The loop iterator has been optimized as advised, relocating it to a dedicated unchecked
code block that optimizes its execution.
AIV-02C: Optimization of if
Structure
Type | Severity | Location |
---|---|---|
Gas Optimization | ![]() | ArcadeItemsVerifier.sol:L127 |
Description:
The if-else-if
structure within the ArcadeItemsVerifier::verifyPredicates
function's for
loop can be optimized as the last condition is redundantly evaluated.
Example:
112if (item.cType == CollateralType.ERC_721) {113 IERC721 asset = IERC721(item.asset);114
115 // Wildcard, but vault has no assets or not enough specified116 if (item.anyIdAllowed && asset.balanceOf(vault) < item.amount) return false;117 // Does not own specifically specified asset118 if (!item.anyIdAllowed && asset.ownerOf(item.tokenId) != vault) return false;119} else if (item.cType == CollateralType.ERC_1155) {120 IERC1155 asset = IERC1155(item.asset);121
122 // Wildcard not allowed, since we can't check overall 1155 balances123 if (item.anyIdAllowed) revert IV_InvalidWildcard(item.asset);124
125 // Does not own specifically specified asset126 if (asset.balanceOf(vault, item.tokenId) < item.amount) return false;127} else if (item.cType == CollateralType.ERC_20) {
Recommendation:
Given that the CollateralType
contract member represents an enum
, the Solidity decoding mechanism will disallow values that cannot be cast to the enum
.
As such, we advise the last else if
conditional to be made a simple else
clause optimizing the gas cost of the contract during EIP-20 balance validations.
Alleviation (7a4e1dc948e94ded7385dbb74818bcf93ecc207c):
The if-else-if
structure has been optimized as advised, reducing the conditional's worst-case evaluation gas cost.