Skip to content

[NLA-01C] Inefficient mapping Lookups #12

Description

@dkuppitz

NLA-01C: Inefficient mapping Lookups

Type Severity Location
Gas Optimization NonblockingLzAppUpgradeable.sol:L172, L176

Description:

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

Example:

bytes32 payloadHash = $.failedMessages[srcChainId][srcAddress][nonce];
require(payloadHash != bytes32(0), "NonblockingLzApp: no stored message");
require(keccak256(payload) == payloadHash, "NonblockingLzApp: invalid payload");
// clear the stored message
$.failedMessages[srcChainId][srcAddress][nonce] = bytes32(0);

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions