diff --git a/src/MetaMorpho.sol b/src/MetaMorpho.sol index 1c680fe0..f364de4c 100644 --- a/src/MetaMorpho.sol +++ b/src/MetaMorpho.sol @@ -284,6 +284,7 @@ contract MetaMorpho is ERC4626, ERC20Permit, Ownable2Step, Multicall, IMetaMorph } else { // newSupplyCap > supplyCap >= 0 so there's no need to check `pendingCap[id].validAt != 0`. if (newSupplyCap == pendingCap[id].value) revert ErrorsLib.AlreadyPending(); + if (config[id].removableAt != 0) revert ErrorsLib.PendingRemoval(); pendingCap[id].update(newSupplyCap.toUint184(), timelock); diff --git a/test/forge/MarketTest.sol b/test/forge/MarketTest.sol index 69a7dd8d..0d6e60cc 100644 --- a/test/forge/MarketTest.sol +++ b/test/forge/MarketTest.sol @@ -79,6 +79,17 @@ contract MarketTest is IntegrationTest { vault.submitCap(allMarkets[0], CAP); } + function testSubmitCapRemovalSubmitted(uint256 cap) public { + cap = bound(cap, MIN_TEST_ASSETS, MAX_TEST_ASSETS); + + vm.startPrank(CURATOR); + vault.submitMarketRemoval(allMarkets[0].id()); + + vm.expectRevert(ErrorsLib.PendingRemoval.selector); + vault.submitCap(allMarkets[0], cap); + vm.stopPrank(); + } + function testSetSupplyQueue() public { Id[] memory supplyQueue = new Id[](2); supplyQueue[0] = allMarkets[1].id(); @@ -155,10 +166,8 @@ contract MarketTest is IntegrationTest { function testUpdateWithdrawQueueRemovingDisabledMarket() public { _setCap(allMarkets[2], 0); - vm.startPrank(CURATOR); + vm.prank(CURATOR); vault.submitMarketRemoval(allMarkets[2].id()); - vault.submitCap(allMarkets[2], CAP + 1); - vm.stopPrank(); vm.warp(block.timestamp + TIMELOCK);