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]
(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