The linked statements perform key-based lookup operations on mapping declarations from storage multiple times for the same key redundantly.
Example:
/**
* @notice This method is executed upon the callback of vrf for entropy. This method will use the randomWord to select
* a ranom index from the `depositedTnfts` array to be next redeemable NFT.
* @param randomWord Random uint seed received from vrf.
*/
function fulfillRandomSeed(uint256 randomWord) external onlyBasketVrfConsumer {
// choose a nft to be next redeemable
uint256 index;
index = randomWord % depositedTnfts.length;
address tnft = depositedTnfts[index].tnft;
uint256 tokenId = depositedTnfts[index].tokenId;
nextToRedeem = RedeemData(tnft, tokenId);
emit RedeemableChosen(tnft, tokenId);
seedRequestInFlight = false;
pendingSeedRequestId = 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.
BTE-01C: Inefficient
mapping
LookupsDescription:
The linked statements perform key-based lookup operations on
mapping
declarations from storage multiple times for the same key redundantly.Example:
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 themapping
in case of primitive types or holds astorage
pointer to thestruct
contained.