Omniscia Evergon Labs Audit

AssetUnwrapperFacetStorage Code Style Findings

AssetUnwrapperFacetStorage Code Style Findings

AUS-01C: Inefficient mapping Lookups

Description:

The linked statements perform key-based lookup operations on mapping declarations from storage multiple times for the same key redundantly.

Example:

packages/contracts/contracts/withdrawalFacets/AssetUnwrapperFacetStorage.sol
63if (account != gs.infoForId[campaignId].creator) revert NonCreatorAccount(account);
64if (l.nonFundedState == StateFacetStorage.layout().stateOfId[campaignId]) {
65 revert NotInNonFundedState(l.nonFundedState, StateFacetStorage.layout().stateOfId[campaignId]);
66}
67
68address fractionsContract = gs.infoForId[campaignId].fractionsContract;

Recommendation:

As the lookups internally perform an expensive keccak256 operation, we advise the lookups to be cached wherever possible to a single local declaration that either holds the value of the mapping in case of primitive types or holds a storage pointer to the struct contained.

As the compiler's optimizations may take care of these caching operations automatically at-times, we advise the optimization to be selectively applied, tested, and then fully adopted to ensure that the proposed caching model indeed leads to a reduction in gas costs.

Alleviation (71cda4ccfdcfa25fb96a4565f1f8143b350dd246):

The contract is no longer part of the codebase rendering this exhibit to be inapplicable.

AUS-02C: Non-Standard Storage Slot Definition

Description:

The referenced declaration will define a storage slot for use by a facet of the system's main EIP-2535 Diamond, however, the way it is declared does not adhere to the latest standards.

Example:

packages/contracts/contracts/withdrawalFacets/AssetUnwrapperFacetStorage.sol
30bytes32 internal constant STORAGE_SLOT = keccak256("Evergonlabs.Tmi-Tokenizer.storage.AssetUnwrapperFacetStorage");

Recommendation:

We advise the EIP-7201 name-spaced layout approach to be adhered to similarly to OpenZeppelin and other relevant standard libraries, ensuring consistency among the ecosystem's widely utilized libraries and conforming to the latest standards.

Alleviation (71cda4ccfdcfa25fb96a4565f1f8143b350dd246):

The contract is no longer part of the codebase rendering this exhibit to be inapplicable.