- High: 1
- Medium: 0
- Low: 0
In proxy pattern, the upgraded storage layout should follow the previous one. If not, it will lead to storage collision and several sensitive data will be override.
In the ThunderLoanUpgraded.sol
contract, the storage layout is the following format:
mapping(IERC20 => AssetToken) public s_tokenToAssetToken;
uint256 private s_flashLoanFee;
mapping(IERC20 token => bool currentlyFlashLoaning) private s_currentlyFlashLoaning;
which is not coherent to the storage layout of ThunderLoan.sol
mapping(IERC20 => AssetToken) public s_tokenToAssetToken;
uint256 private s_feePrecision;
uint256 private s_flashLoanFee;
mapping(IERC20 token => bool currentlyFlashLoaning) private s_currentlyFlashLoaning;
If logic contract is updated, the storage slot that stores the s_flashLoanFee
will be overrided by s_currentlyFlashLoaning
.
The value of s_flashLoanFee
will be incorrect and lead to wrong calculation.
Manual Review
Coherent to the previous storage layout and avoid adding or deleting new state variables.