code-423n4 / 2022-04-jpegd-findings

1 stars 1 forks source link

Gas Optimizations #153

Open code423n4 opened 2 years ago

code423n4 commented 2 years ago

No Need to initialize variables with default values

https://github.com/code-423n4/2022-04-jpegd/blob/main/contracts/vaults/FungibleAssetVaultForDAO.sol#L45

address internal constant ETH = address(0);

could be changed to just

address internal constant ETH;

https://github.com/code-423n4/2022-04-jpegd/blob/main/contracts/vaults/NFTVault.sol#L181

for (uint256 i = 0; i < _typeInitializers.length; i++) {
    NFTCategoryInitializer memory initializer = _typeInitializers[i];
    nftTypeValueETH[initializer.hash] = initializer.valueETH;
    for (uint256 j = 0; j < initializer.nfts.length; j++) {
        nftTypes[initializer.nfts[j]] = initializer.hash;
    }
}

Could be changed to

for (uint256 i; i < _typeInitializers.length; i++) {
    NFTCategoryInitializer memory initializer = _typeInitializers[i];
    nftTypeValueETH[initializer.hash] = initializer.valueETH;
    for (uint256 j; j < initializer.nfts.length; j++) {
        nftTypes[initializer.nfts[j]] = initializer.hash;
    }
}

Use pre-increment

https://github.com/code-423n4/2022-04-jpegd/blob/main/contracts/vaults/NFTVault.sol#L181

for (uint256 i = 0; i < _typeInitializers.length; i++) {
    NFTCategoryInitializer memory initializer = _typeInitializers[i];
    nftTypeValueETH[initializer.hash] = initializer.valueETH;
    for (uint256 j = 0; j < initializer.nfts.length; j++) {
        nftTypes[initializer.nfts[j]] = initializer.hash;
    }
}

could be changed to

for (uint256 i = 0; i < _typeInitializers.length; ++i) {
    NFTCategoryInitializer memory initializer = _typeInitializers[i];
    nftTypeValueETH[initializer.hash] = initializer.valueETH;
    for (uint256 j = 0; j < initializer.nfts.length; ++j) {
        nftTypes[initializer.nfts[j]] = initializer.hash;
    }
}

Caching array length

https://github.com/code-423n4/2022-04-jpegd/blob/main/contracts/vaults/NFTVault.sol#L181

for (uint256 i = 0; i < _typeInitializers.length; i++) {
    NFTCategoryInitializer memory initializer = _typeInitializers[i];
    nftTypeValueETH[initializer.hash] = initializer.valueETH;
    for (uint256 j = 0; j < initializer.nfts.length; j++) {
        nftTypes[initializer.nfts[j]] = initializer.hash;
    }
}

Could be changed to

uint typeInitlength = _typeInitializers.length;
for (uint256 i = 0; i < typeInitlength; i++) {
    NFTCategoryInitializer memory initializer = _typeInitializers[i];
    nftTypeValueETH[initializer.hash] = initializer.valueETH;
    for (uint256 j = 0; j < initializer.nfts.length; j++) {
        nftTypes[initializer.nfts[j]] = initializer.hash;
    }
}