20,000 USDC
View results
Submission Details
Severity: gas
Valid

Caching Storage Variables

Gas Optimization

Cache storage variables that are being read frequently in functions.

https://github.com/Cyfrin/2023-07-beedle/blob/main/src/Lender.sol#L130-L163

// add this caching to replace the pools[poolId]

// caching reduces from `240654` to `240604`
(uint256 outstandingLoans, uint256 poolBalance) = (pools[poolId].outstandingLoans, pools[poolId].poolBalance);
145: if (p.outstandingLoans != pools[poolId].outstandingLoans)
148: uint256 currentBalance = pools[poolId].poolBalance;

https://github.com/Cyfrin/2023-07-beedle/blob/main/src/Lender.sol#L182-L192

(address lender, address loanToken, uint256 poolBalance) = (pools[poolId].lender, pools[poolId].loanToken, pools[poolId].poolBalance);
183: if (pools[poolId].lender != msg.sender) revert Unauthorized();
185: _updatePoolBalance(poolId, pools[poolId].poolBalance + amount);
187: IERC20(pools[poolId].loanToken).transferFrom(

https://github.com/Cyfrin/2023-07-beedle/blob/main/src/Lender.sol#L198-L204

(address lender, address loanToken, uint256 poolBalance) = (pools[poolId].lender, pools[poolId].loanToken, pools[poolId].poolBalance);
199: if (pools[poolId].lender != msg.sender) revert Unauthorized();
201: _updatePoolBalance(poolId, pools[poolId].poolBalance - amount);
203: IERC20(pools[poolId].loanToken).transfer(msg.sender, amount);

// The majority of functions in this file keeps rereading from storage, adding all them here seems redundant

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.