11diff --git a/src/EulerEarn.sol b/src/EulerEarn.sol
2- index 4635a89..ae0869b 100644
2+ index 27c1873..1efc278 100644
33--- a/src/EulerEarn.sol
44+++ b/src/EulerEarn.sol
5- @@ -106,6 +106,18 @@ contract EulerEarn is ReentrancyGuard, ERC4626, Ownable2Step, EVCUtil, IEulerEar
5+ @@ -106,6 +106,17 @@ contract EulerEarn is ReentrancyGuard, ERC4626, Ownable2Step, EVCUtil, IEulerEar
66 /// @dev "Overrides" the ERC20's storage variable to be able to modify it.
77 string private _symbol;
88
@@ -14,14 +14,13 @@ index 4635a89..ae0869b 100644
1414+ // The last index at which a market identifier has been removed from the withdraw queue.
1515+ mapping(address => uint256) public deletedAt;
1616+
17- + // hooks for cvl assertions
1817+ function HOOK_after_accrueInterest() internal {}
1918+ function HOOK_after_withdrawStrategy(uint256) internal {}
2019+
2120 /* CONSTRUCTOR */
2221
2322 /// @dev Initializes the contract.
24- @@ -353,6 +365 ,9 @@ contract EulerEarn is ReentrancyGuard, ERC4626, Ownable2Step, EVCUtil, IEulerEar
23+ @@ -353,6 +364 ,9 @@ contract EulerEarn is ReentrancyGuard, ERC4626, Ownable2Step, EVCUtil, IEulerEar
2524 seen[prevIndex] = true;
2625
2726 newWithdrawQueue[i] = id;
@@ -31,7 +30,7 @@ index 4635a89..ae0869b 100644
3130 }
3231
3332 for (uint256 i; i < currLength; ++i) {
34- @@ -369,6 +384 ,9 @@ contract EulerEarn is ReentrancyGuard, ERC4626, Ownable2Step, EVCUtil, IEulerEar
33+ @@ -369,6 +383 ,9 @@ contract EulerEarn is ReentrancyGuard, ERC4626, Ownable2Step, EVCUtil, IEulerEar
3534 revert ErrorsLib.InvalidMarketRemovalTimelockNotElapsed(id);
3635 }
3736 }
@@ -41,39 +40,39 @@ index 4635a89..ae0869b 100644
4140
4241 delete config[id];
4342 }
44- @@ -559,6 +577 ,7 @@ contract EulerEarn is ReentrancyGuard, ERC4626, Ownable2Step, EVCUtil, IEulerEar
43+ @@ -559,6 +576 ,7 @@ contract EulerEarn is ReentrancyGuard, ERC4626, Ownable2Step, EVCUtil, IEulerEar
4544 /// @inheritdoc IERC4626
4645 function deposit(uint256 assets, address receiver) public override nonReentrant returns (uint256 shares) {
4746 _accrueInterest();
4847+ HOOK_after_accrueInterest();
4948
5049 shares = _convertToSharesWithTotals(assets, totalSupply(), lastTotalAssets, Math.Rounding.Floor);
5150
52- @@ -570,6 +589 ,7 @@ contract EulerEarn is ReentrancyGuard, ERC4626, Ownable2Step, EVCUtil, IEulerEar
51+ @@ -570,6 +588 ,7 @@ contract EulerEarn is ReentrancyGuard, ERC4626, Ownable2Step, EVCUtil, IEulerEar
5352 /// @inheritdoc IERC4626
5453 function mint(uint256 shares, address receiver) public override nonReentrant returns (uint256 assets) {
5554 _accrueInterest();
5655+ HOOK_after_accrueInterest();
5756
5857 assets = _convertToAssetsWithTotals(shares, totalSupply(), lastTotalAssets, Math.Rounding.Ceil);
5958
60- @@ -584,6 +604 ,7 @@ contract EulerEarn is ReentrancyGuard, ERC4626, Ownable2Step, EVCUtil, IEulerEar
59+ @@ -584,6 +603 ,7 @@ contract EulerEarn is ReentrancyGuard, ERC4626, Ownable2Step, EVCUtil, IEulerEar
6160 returns (uint256 shares)
6261 {
6362 _accrueInterest();
6463+ HOOK_after_accrueInterest();
6564
6665 // Do not call expensive `maxWithdraw` and optimistically withdraw assets.
6766
68- @@ -600,6 +621 ,7 @@ contract EulerEarn is ReentrancyGuard, ERC4626, Ownable2Step, EVCUtil, IEulerEar
67+ @@ -600,6 +620 ,7 @@ contract EulerEarn is ReentrancyGuard, ERC4626, Ownable2Step, EVCUtil, IEulerEar
6968 returns (uint256 assets)
7069 {
7170 _accrueInterest();
7271+ HOOK_after_accrueInterest();
7372
7473 // Do not call expensive `maxRedeem` and optimistically redeem shares.
7574
76- @@ -729,7 +751 ,9 @@ contract EulerEarn is ReentrancyGuard, ERC4626, Ownable2Step, EVCUtil, IEulerEar
75+ @@ -729,7 +750 ,9 @@ contract EulerEarn is ReentrancyGuard, ERC4626, Ownable2Step, EVCUtil, IEulerEar
7776 // clamp at 0 so the error raised is the more informative NotEnoughLiquidity.
7877 _updateLastTotalAssets(lastTotalAssets.zeroFloorSub(assets));
7978
@@ -83,7 +82,7 @@ index 4635a89..ae0869b 100644
8382
8483 super._withdraw(caller, receiver, owner, assets, shares);
8584 }
86- @@ -780,6 +804 ,9 @@ contract EulerEarn is ReentrancyGuard, ERC4626, Ownable2Step, EVCUtil, IEulerEar
85+ @@ -780,6 +803 ,9 @@ contract EulerEarn is ReentrancyGuard, ERC4626, Ownable2Step, EVCUtil, IEulerEar
8786 IERC20(asset()).forceApproveMaxWithPermit2(address(id), permit2);
8887
8988 if (!marketConfig.enabled) {
@@ -93,7 +92,7 @@ index 4635a89..ae0869b 100644
9392 withdrawQueue.push(id);
9493
9594 if (withdrawQueue.length > ConstantsLib.MAX_QUEUE_LENGTH) revert ErrorsLib.MaxQueueLengthExceeded();
96- @@ -837,6 +864 ,9 @@ contract EulerEarn is ReentrancyGuard, ERC4626, Ownable2Step, EVCUtil, IEulerEar
95+ @@ -837,6 +863 ,9 @@ contract EulerEarn is ReentrancyGuard, ERC4626, Ownable2Step, EVCUtil, IEulerEar
9796 /// @dev Withdraws `assets` from the strategy vaults.
9897 function _withdrawStrategy(uint256 assets) internal {
9998 for (uint256 i; i < withdrawQueue.length; ++i) {
0 commit comments