diff --git a/certora/specs/NoResidue.spec b/certora/specs/NoResidue.spec index aa8ef52..4860963 100644 --- a/certora/specs/NoResidue.spec +++ b/certora/specs/NoResidue.spec @@ -83,12 +83,12 @@ rule supplyPreservesBalance(env e, BlueBundlesV1.MarketParams marketParams, uint assert bundlerBalance[token] == before; } -rule withdrawPreservesBalance(env e, BlueBundlesV1.MarketParams marketParams, uint256 assets, uint256 shares, uint256 minSharePriceE27, BlueBundlesV1.SignedAuthorization signedAuthorization, uint256 feePct, address recipient, address token, uint256 deadline) { +rule withdrawPreservesBalance(env e, BlueBundlesV1.MarketParams marketParams, uint256 assets, uint256 shares, BlueBundlesV1.SignedAuthorization signedAuthorization, uint256 feePct, address recipient, address token, uint256 deadline) { require e.msg.sender != currentContract, "bundler is never its own caller"; require recipient != currentContract, "no bundler donations of the fee"; mathint before = bundlerBalance[token]; - blueBundlesV1Withdraw(e, marketParams, assets, shares, minSharePriceE27, signedAuthorization, feePct, recipient, deadline); + blueBundlesV1Withdraw(e, marketParams, assets, shares, signedAuthorization, feePct, recipient, deadline); assert bundlerBalance[token] == before; } diff --git a/src/blue/BlueBundlesV1.sol b/src/blue/BlueBundlesV1.sol index 084dd42..5c8b397 100644 --- a/src/blue/BlueBundlesV1.sol +++ b/src/blue/BlueBundlesV1.sol @@ -158,12 +158,11 @@ contract BlueBundlesV1 is IBlueBundlesV1, IMorphoRepayCallback { /// @dev The referral fee is deducted from the withdrawn assets; the remainder is sent to msg.sender. /// @dev Fee = withdrawnAssets * referralFeePct / WAD; net = withdrawnAssets - fee. /// @dev To receive an amount W, pass assets = floor(W * WAD / (WAD - referralFeePct)). - /// @dev minSharePriceE27 lower-bounds the realized withdraw share price (withdrawn assets per share, scaled by 1e27). + /// @dev The supply share price is not checked: any drop due to bad debt realisation is not quickly reversed, so a reverted exit retried later would be on similar or worse terms. function blueBundlesV1Withdraw( MarketParams memory marketParams, uint256 assets, uint256 shares, - uint256 minSharePriceE27, SignedAuthorization memory signedAuthorization, uint256 referralFeePct, address referralFeeRecipient, @@ -173,15 +172,13 @@ contract BlueBundlesV1 is IBlueBundlesV1, IMorphoRepayCallback { require(referralFeePct < WAD, PctExceeded()); setAuthorizationWithSig(signedAuthorization); - (uint256 withdrawn, uint256 withdrawnShares) = - IMorpho(BLUE).withdraw(marketParams, assets, shares, msg.sender, address(this)); - require(withdrawn.mulDivDown(1e27, withdrawnShares) >= minSharePriceE27, SlippageExceeded()); + (assets,) = IMorpho(BLUE).withdraw(marketParams, assets, shares, msg.sender, address(this)); - uint256 referralFeeAssets = withdrawn.mulDivDown(referralFeePct, WAD); + uint256 referralFeeAssets = assets.mulDivDown(referralFeePct, WAD); if (referralFeeAssets > 0) { SafeTransferLib.safeTransfer(marketParams.loanToken, referralFeeRecipient, referralFeeAssets); } - SafeTransferLib.safeTransfer(marketParams.loanToken, msg.sender, withdrawn - referralFeeAssets); + SafeTransferLib.safeTransfer(marketParams.loanToken, msg.sender, assets - referralFeeAssets); } /// @dev Moves the full position of msg.sender (collateral and borrow shares, read from Blue) from the source market to the destination market. diff --git a/src/blue/interfaces/IBlueBundlesV1.sol b/src/blue/interfaces/IBlueBundlesV1.sol index 3f72846..e41e53a 100644 --- a/src/blue/interfaces/IBlueBundlesV1.sol +++ b/src/blue/interfaces/IBlueBundlesV1.sol @@ -68,7 +68,6 @@ interface IBlueBundlesV1 { MarketParams memory marketParams, uint256 assets, uint256 shares, - uint256 minSharePriceE27, SignedAuthorization memory signedAuthorization, uint256 referralFeePct, address referralFeeRecipient, diff --git a/src/vault/VaultBundlesV1.sol b/src/vault/VaultBundlesV1.sol index 3e85fd5..e7574d1 100644 --- a/src/vault/VaultBundlesV1.sol +++ b/src/vault/VaultBundlesV1.sol @@ -61,12 +61,11 @@ contract VaultBundlesV1 is IVaultBundlesV1 { /// @dev The referral fee is deducted from the withdrawn assets; the remainder is sent to msg.sender. /// @dev Fee = withdrawnAssets * referralFeePct / WAD; net = withdrawnAssets - fee. /// @dev To receive an amount W, pass assets = floor(W * WAD / (WAD - referralFeePct)). - /// @dev minSharePriceE27 lower-bounds the realized withdraw share price (withdrawn assets per share, scaled by 1e27). + /// @dev The vault share price is not checked: any drop (e.g. a bad debt realisation) is not quickly reversed, so a reverted exit retried later would be on similar or worse terms. function vaultBundlesV1Withdraw( address vault, uint256 assets, uint256 shares, - uint256 minSharePriceE27, Permit memory sharesPermit, uint256 referralFeePct, address referralFeeRecipient, @@ -80,9 +79,8 @@ contract VaultBundlesV1 is IVaultBundlesV1 { TokenLib.submitPermit(vault, sharesPermit); - if (assets > 0) shares = IERC4626(vault).withdraw(assets, address(this), msg.sender); + if (assets > 0) IERC4626(vault).withdraw(assets, address(this), msg.sender); else assets = IERC4626(vault).redeem(shares, address(this), msg.sender); - require(assets.mulDivDown(1e27, shares) >= minSharePriceE27, SlippageExceeded()); address asset = IERC4626(vault).asset(); uint256 referralFeeAssets = assets.mulDivDown(referralFeePct, WAD); @@ -96,13 +94,13 @@ contract VaultBundlesV1 is IVaultBundlesV1 { /// @dev Exactly one of assetsWithdrawn and sharesRedeemed should be non-zero: sourceVault is withdrawn by assets, or redeemed by shares. To migrate the sender's entire position, pass its full sourceVault share balance as shares. /// @dev The referral fee is deducted from the withdrawn assets; the remainder is deposited into destVault. /// @dev Fee = withdrawnAssets * referralFeePct / WAD; deposited = withdrawnAssets - fee. - /// @dev sourceMinSharePriceE27 lower-bounds the realized sourceVault withdraw share price; destMaxSharePriceE27 upper-bounds the realized destVault deposit share price (both assets per share, scaled by 1e27). + /// @dev The source vault share price is not checked: any drop (e.g. a bad debt realisation) is not quickly reversed, so a reverted exit retried later would be on similar or worse terms. + /// @dev destMaxSharePriceE27 upper-bounds the realized destVault deposit share price (deposited assets per share, scaled by 1e27). function vaultBundlesV1Migrate( address sourceVault, address destVault, uint256 assetsWithdrawn, uint256 sharesRedeemed, - uint256 sourceMinSharePriceE27, uint256 destMaxSharePriceE27, Permit memory sharesPermit, uint256 referralFeePct, @@ -120,12 +118,8 @@ contract VaultBundlesV1 is IVaultBundlesV1 { address asset = IERC4626(sourceVault).asset(); require(asset == IERC4626(destVault).asset(), InconsistentAssets()); - if (assetsWithdrawn > 0) { - sharesRedeemed = IERC4626(sourceVault).withdraw(assetsWithdrawn, address(this), msg.sender); - } else { - assetsWithdrawn = IERC4626(sourceVault).redeem(sharesRedeemed, address(this), msg.sender); - } - require(assetsWithdrawn.mulDivDown(1e27, sharesRedeemed) >= sourceMinSharePriceE27, SlippageExceeded()); + if (assetsWithdrawn > 0) IERC4626(sourceVault).withdraw(assetsWithdrawn, address(this), msg.sender); + else assetsWithdrawn = IERC4626(sourceVault).redeem(sharesRedeemed, address(this), msg.sender); uint256 referralFeeAssets = assetsWithdrawn.mulDivDown(referralFeePct, WAD); uint256 toDeposit = assetsWithdrawn - referralFeeAssets; diff --git a/src/vault/interfaces/IVaultBundlesV1.sol b/src/vault/interfaces/IVaultBundlesV1.sol index 8d60d57..b681edd 100644 --- a/src/vault/interfaces/IVaultBundlesV1.sol +++ b/src/vault/interfaces/IVaultBundlesV1.sol @@ -31,7 +31,6 @@ interface IVaultBundlesV1 { address vault, uint256 assets, uint256 shares, - uint256 minSharePriceE27, Permit memory sharesPermit, uint256 referralFeePct, address referralFeeRecipient, @@ -43,7 +42,6 @@ interface IVaultBundlesV1 { address destVault, uint256 assetsWithdrawn, uint256 sharesRedeemed, - uint256 sourceMinSharePriceE27, uint256 destMaxSharePriceE27, Permit memory sharesPermit, uint256 referralFeePct, diff --git a/test/BlueBundlesTest.sol b/test/BlueBundlesTest.sol index 1cc383a..024ae40 100644 --- a/test/BlueBundlesTest.sol +++ b/test/BlueBundlesTest.sol @@ -183,7 +183,7 @@ contract BlueBundlesTest is Test { loanToken.approve(address(morpho), type(uint256).max); morpho.supply(marketParams, assets, 0, sigUser, ""); - blueBundles.blueBundlesV1Withdraw(marketParams, assets, 0, 0, authSig, 0, address(0), block.timestamp); + blueBundles.blueBundlesV1Withdraw(marketParams, assets, 0, authSig, 0, address(0), block.timestamp); vm.stopPrank(); assertEq(loanToken.balanceOf(sigUser), assets); @@ -422,7 +422,7 @@ contract BlueBundlesTest is Test { marketParams, 1, type(uint256).max, _noPermit(), WAD, address(0), block.timestamp ); vm.expectRevert(IBlueBundlesV1.PctExceeded.selector); - blueBundles.blueBundlesV1Withdraw(marketParams, 1, 0, 0, _noAuthSig(), WAD, address(0), block.timestamp); + blueBundles.blueBundlesV1Withdraw(marketParams, 1, 0, _noAuthSig(), WAD, address(0), block.timestamp); vm.expectRevert(IBlueBundlesV1.PctExceeded.selector); blueBundles.blueBundlesV1MigrateBorrowPosition( marketParams, destMarketParams, type(uint256).max, 0, WAD, _noAuthSig(), WAD, address(0), block.timestamp @@ -446,7 +446,7 @@ contract BlueBundlesTest is Test { vm.expectRevert(IBlueBundlesV1.DeadlinePassed.selector); blueBundles.blueBundlesV1Supply(marketParams, 1, type(uint256).max, _noPermit(), 0, address(0), past); vm.expectRevert(IBlueBundlesV1.DeadlinePassed.selector); - blueBundles.blueBundlesV1Withdraw(marketParams, 1, 0, 0, _noAuthSig(), 0, address(0), past); + blueBundles.blueBundlesV1Withdraw(marketParams, 1, 0, _noAuthSig(), 0, address(0), past); vm.expectRevert(IBlueBundlesV1.DeadlinePassed.selector); blueBundles.blueBundlesV1MigrateBorrowPosition( marketParams, destMarketParams, type(uint256).max, 0, WAD, _noAuthSig(), 0, address(0), past @@ -925,9 +925,7 @@ contract BlueBundlesTest is Test { vm.startPrank(user); loanToken.approve(address(morpho), type(uint256).max); morpho.supply(marketParams, supplyAssets, 0, user, ""); - blueBundles.blueBundlesV1Withdraw( - marketParams, withdrawAssets, 0, 0, _noAuthSig(), 0, address(0), block.timestamp - ); + blueBundles.blueBundlesV1Withdraw(marketParams, withdrawAssets, 0, _noAuthSig(), 0, address(0), block.timestamp); vm.stopPrank(); assertEq(morpho.expectedSupplyAssets(marketParams, user), supplyAssets - withdrawAssets, "remaining supply"); @@ -947,7 +945,7 @@ contract BlueBundlesTest is Test { loanToken.approve(address(morpho), type(uint256).max); morpho.supply(marketParams, supplyAssets, 0, user, ""); blueBundles.blueBundlesV1Withdraw( - marketParams, withdrawAssets, 0, 0, _noAuthSig(), referralFeePct, referrer, block.timestamp + marketParams, withdrawAssets, 0, _noAuthSig(), referralFeePct, referrer, block.timestamp ); vm.stopPrank(); @@ -974,7 +972,7 @@ contract BlueBundlesTest is Test { vm.prank(user); blueBundles.blueBundlesV1Withdraw( - marketParams, withdrawAssets, 0, 0, _noAuthSig(), referralFeePct, referrer, block.timestamp + marketParams, withdrawAssets, 0, _noAuthSig(), referralFeePct, referrer, block.timestamp ); assertEq(loanToken.balanceOf(user), targetNet, "net equals target"); @@ -990,7 +988,7 @@ contract BlueBundlesTest is Test { loanToken.approve(address(morpho), type(uint256).max); morpho.supply(marketParams, supplyAssets, 0, user, ""); blueBundles.blueBundlesV1Withdraw( - marketParams, 0, morpho.supplyShares(id, user), 0, _noAuthSig(), referralFeePct, referrer, block.timestamp + marketParams, 0, morpho.supplyShares(id, user), _noAuthSig(), referralFeePct, referrer, block.timestamp ); vm.stopPrank(); @@ -1252,21 +1250,6 @@ contract BlueBundlesTest is Test { vm.stopPrank(); } - /// @dev A minSharePriceE27 above the realized withdraw share price reverts. - function testWithdrawSlippageExceeded() public { - uint256 supplyAssets = 100e18; - deal(address(loanToken), user, supplyAssets); - - vm.startPrank(user); - loanToken.approve(address(morpho), type(uint256).max); - morpho.supply(marketParams, supplyAssets, 0, user, ""); - vm.expectRevert(IBlueBundlesV1.SlippageExceeded.selector); - blueBundles.blueBundlesV1Withdraw( - marketParams, supplyAssets, 0, type(uint256).max, _noAuthSig(), 0, address(0), block.timestamp - ); - vm.stopPrank(); - } - /// @dev A minSharePriceE27 above the realized borrow share price reverts. function testSupplyCollateralAndBorrowSlippageExceeded() public { uint256 borrowAssets = 100e18; diff --git a/test/VaultBundlesTest.sol b/test/VaultBundlesTest.sol index e29a0a0..b1c5ac5 100644 --- a/test/VaultBundlesTest.sol +++ b/test/VaultBundlesTest.sol @@ -243,7 +243,7 @@ contract VaultBundlesTest is Test { assets = bound(assets, MIN_ASSETS, MAX_ASSETS); _deposited(vault, assets); - bundles.vaultBundlesV1Withdraw(address(vault), assets, 0, 0, noSharesPermit, 0, address(0), block.timestamp); + bundles.vaultBundlesV1Withdraw(address(vault), assets, 0, noSharesPermit, 0, address(0), block.timestamp); assertEq(loanToken.balanceOf(user), assets, "user loan token"); assertEq(loanToken.balanceOf(address(bundles)), 0, "bundler loan token"); @@ -267,7 +267,7 @@ contract VaultBundlesTest is Test { uint256 expectedFee = assets * referralFeePct / WAD; bundles.vaultBundlesV1Withdraw( - address(vault), assets, 0, 0, noSharesPermit, referralFeePct, referralFeeRecipient, block.timestamp + address(vault), assets, 0, noSharesPermit, referralFeePct, referralFeeRecipient, block.timestamp ); assertEq(loanToken.balanceOf(user), assets - expectedFee, "user net"); @@ -290,7 +290,7 @@ contract VaultBundlesTest is Test { _deposited(vault, assets); bundles.vaultBundlesV1Withdraw( - address(vault), 0, vault.balanceOf(user), 0, noSharesPermit, 0, address(0), block.timestamp + address(vault), 0, vault.balanceOf(user), noSharesPermit, 0, address(0), block.timestamp ); assertApproxEqAbs(loanToken.balanceOf(user), assets, 1, "user loan token"); @@ -315,7 +315,6 @@ contract VaultBundlesTest is Test { address(vault), 0, vault.balanceOf(user), - 0, noSharesPermit, referralFeePct, referralFeeRecipient, @@ -351,7 +350,7 @@ contract VaultBundlesTest is Test { _deposited(vault, assets); bundles.vaultBundlesV1Withdraw( - address(vault), assets, 0, 0, noSharesPermit, referralFeePct, referralFeeRecipient, block.timestamp + address(vault), assets, 0, noSharesPermit, referralFeePct, referralFeeRecipient, block.timestamp ); assertEq(loanToken.balanceOf(user), targetNet, "net equals target"); @@ -373,26 +372,7 @@ contract VaultBundlesTest is Test { // No approval of the bundler over the vault shares. vm.expectRevert(); - bundles.vaultBundlesV1Withdraw(address(vault), assets, 0, 0, noSharesPermit, 0, address(0), block.timestamp); - } - - function testWithdrawSlippageV1() public { - _testWithdrawSlippage(vaultV1); - } - - function testWithdrawSlippageV2() public { - _testWithdrawSlippage(vaultV2); - } - - function _testWithdrawSlippage(IERC4626 vault) internal { - uint256 assets = 100e18; - _deposited(vault, assets); - - // Realized share price is ~1e27, always below a max-uint floor. - vm.expectRevert(IVaultBundlesV1.SlippageExceeded.selector); - bundles.vaultBundlesV1Withdraw( - address(vault), assets, 0, type(uint256).max, noSharesPermit, 0, address(0), block.timestamp - ); + bundles.vaultBundlesV1Withdraw(address(vault), assets, 0, noSharesPermit, 0, address(0), block.timestamp); } function testWithdrawNotExactlyOneZero() public { @@ -400,26 +380,24 @@ contract VaultBundlesTest is Test { // Both assets and shares non-zero. vm.expectRevert(IVaultBundlesV1.NotExactlyOneZero.selector); - bundles.vaultBundlesV1Withdraw(address(vaultV1), 100e18, 1, 0, noSharesPermit, 0, address(0), block.timestamp); + bundles.vaultBundlesV1Withdraw(address(vaultV1), 100e18, 1, noSharesPermit, 0, address(0), block.timestamp); // Both assets and shares zero. vm.expectRevert(IVaultBundlesV1.NotExactlyOneZero.selector); - bundles.vaultBundlesV1Withdraw(address(vaultV1), 0, 0, 0, noSharesPermit, 0, address(0), block.timestamp); + bundles.vaultBundlesV1Withdraw(address(vaultV1), 0, 0, noSharesPermit, 0, address(0), block.timestamp); } function testWithdrawDeadline() public { _deposited(vaultV1, 100e18); vm.expectRevert(IVaultBundlesV1.DeadlinePassed.selector); - bundles.vaultBundlesV1Withdraw( - address(vaultV1), 100e18, 0, 0, noSharesPermit, 0, address(0), block.timestamp - 1 - ); + bundles.vaultBundlesV1Withdraw(address(vaultV1), 100e18, 0, noSharesPermit, 0, address(0), block.timestamp - 1); } function testWithdrawPctExceeded() public { _deposited(vaultV1, 100e18); vm.expectRevert(IVaultBundlesV1.PctExceeded.selector); bundles.vaultBundlesV1Withdraw( - address(vaultV1), 100e18, 0, 0, noSharesPermit, WAD, referralFeeRecipient, block.timestamp + address(vaultV1), 100e18, 0, noSharesPermit, WAD, referralFeeRecipient, block.timestamp ); } @@ -448,7 +426,7 @@ contract VaultBundlesTest is Test { Permit memory sharesPermit = _signSharesPermit(sigUserKey, sigUser, vault, type(uint256).max, block.timestamp); vm.prank(sigUser); - bundles.vaultBundlesV1Withdraw(address(vault), assets, 0, 0, sharesPermit, 0, address(0), block.timestamp); + bundles.vaultBundlesV1Withdraw(address(vault), assets, 0, sharesPermit, 0, address(0), block.timestamp); assertApproxEqAbs(loanToken.balanceOf(sigUser), assets, 1, "user loan token"); assertApproxEqAbs(vault.balanceOf(sigUser), 0, 1, "user shares"); @@ -482,7 +460,7 @@ contract VaultBundlesTest is Test { assertEq(vaultV1.allowance(sigUser, address(bundles)), type(uint256).max, "allowance set by front-runner"); vm.prank(sigUser); - bundles.vaultBundlesV1Withdraw(address(vaultV1), assets, 0, 0, sharesPermit, 0, address(0), block.timestamp); + bundles.vaultBundlesV1Withdraw(address(vaultV1), assets, 0, sharesPermit, 0, address(0), block.timestamp); assertApproxEqAbs(loanToken.balanceOf(sigUser), assets, 1, "user loan token"); } @@ -503,7 +481,7 @@ contract VaultBundlesTest is Test { Permit memory sharesPermit = _signSharesPermit(sigUserKey, sigUser, vaultV1, type(uint256).max, block.timestamp); vm.prank(sigUser); bundles.vaultBundlesV1Migrate( - address(vaultV1), address(vaultV2), assets, 0, 0, RAY, sharesPermit, 0, address(0), block.timestamp + address(vaultV1), address(vaultV2), assets, 0, RAY, sharesPermit, 0, address(0), block.timestamp ); assertApproxEqAbs(vaultV1.balanceOf(sigUser), 0, 1, "source shares"); @@ -533,7 +511,7 @@ contract VaultBundlesTest is Test { _deposited(source, assets); bundles.vaultBundlesV1Migrate( - address(source), address(dest), assets, 0, 0, RAY, noSharesPermit, 0, address(0), block.timestamp + address(source), address(dest), assets, 0, RAY, noSharesPermit, 0, address(0), block.timestamp ); assertApproxEqAbs(source.balanceOf(user), 0, 1, "source shares"); @@ -573,7 +551,6 @@ contract VaultBundlesTest is Test { address(dest), assets, 0, - 0, RAY, noSharesPermit, referralFeePct, @@ -613,7 +590,6 @@ contract VaultBundlesTest is Test { address(dest), 0, source.balanceOf(user), - 0, RAY, noSharesPermit, 0, @@ -660,7 +636,6 @@ contract VaultBundlesTest is Test { address(dest), 0, shares, - 0, RAY, noSharesPermit, referralFeePct, @@ -680,7 +655,7 @@ contract VaultBundlesTest is Test { _deposited(vaultV1, 100e18); vm.expectRevert(IVaultBundlesV1.InconsistentAssets.selector); bundles.vaultBundlesV1Migrate( - address(vaultV1), address(vaultOther), 100e18, 0, 0, RAY, noSharesPermit, 0, address(0), block.timestamp + address(vaultV1), address(vaultOther), 100e18, 0, RAY, noSharesPermit, 0, address(0), block.timestamp ); } @@ -690,30 +665,13 @@ contract VaultBundlesTest is Test { // Both assets and shares non-zero. vm.expectRevert(IVaultBundlesV1.NotExactlyOneZero.selector); bundles.vaultBundlesV1Migrate( - address(vaultV1), address(vaultV2), 100e18, 1, 0, RAY, noSharesPermit, 0, address(0), block.timestamp + address(vaultV1), address(vaultV2), 100e18, 1, RAY, noSharesPermit, 0, address(0), block.timestamp ); // Both assets and shares zero. vm.expectRevert(IVaultBundlesV1.NotExactlyOneZero.selector); bundles.vaultBundlesV1Migrate( - address(vaultV1), address(vaultV2), 0, 0, 0, RAY, noSharesPermit, 0, address(0), block.timestamp - ); - } - - function testMigrateSlippageSource() public { - _deposited(vaultV1, 100e18); - vm.expectRevert(IVaultBundlesV1.SlippageExceeded.selector); - bundles.vaultBundlesV1Migrate( - address(vaultV1), - address(vaultV2), - 100e18, - 0, - type(uint256).max, - RAY, - noSharesPermit, - 0, - address(0), - block.timestamp + address(vaultV1), address(vaultV2), 0, 0, RAY, noSharesPermit, 0, address(0), block.timestamp ); } @@ -721,7 +679,7 @@ contract VaultBundlesTest is Test { _deposited(vaultV1, 100e18); vm.expectRevert(IVaultBundlesV1.SlippageExceeded.selector); bundles.vaultBundlesV1Migrate( - address(vaultV1), address(vaultV2), 100e18, 0, 0, 1, noSharesPermit, 0, address(0), block.timestamp + address(vaultV1), address(vaultV2), 100e18, 0, 1, noSharesPermit, 0, address(0), block.timestamp ); } @@ -729,7 +687,7 @@ contract VaultBundlesTest is Test { _deposited(vaultV1, 100e18); vm.expectRevert(IVaultBundlesV1.DeadlinePassed.selector); bundles.vaultBundlesV1Migrate( - address(vaultV1), address(vaultV2), 100e18, 0, 0, RAY, noSharesPermit, 0, address(0), block.timestamp - 1 + address(vaultV1), address(vaultV2), 100e18, 0, RAY, noSharesPermit, 0, address(0), block.timestamp - 1 ); } @@ -741,7 +699,6 @@ contract VaultBundlesTest is Test { address(vaultV2), 100e18, 0, - 0, RAY, noSharesPermit, WAD, @@ -814,10 +771,10 @@ contract VaultBundlesTest is Test { uint256 assets = 100e18; _deposited(vaultV1, 2 * assets); - bundles.vaultBundlesV1Withdraw(address(vaultV1), assets, 0, 0, noSharesPermit, 0, address(0), block.timestamp); + bundles.vaultBundlesV1Withdraw(address(vaultV1), assets, 0, noSharesPermit, 0, address(0), block.timestamp); vm.expectRevert(IVaultBundlesV1.AlreadyInitiated.selector); - bundles.vaultBundlesV1Withdraw(address(vaultV1), assets, 0, 0, noSharesPermit, 0, address(0), block.timestamp); + bundles.vaultBundlesV1Withdraw(address(vaultV1), assets, 0, noSharesPermit, 0, address(0), block.timestamp); } function testMigrateAlreadyInitiated() public { @@ -825,12 +782,12 @@ contract VaultBundlesTest is Test { _deposited(vaultV1, 2 * assets); bundles.vaultBundlesV1Migrate( - address(vaultV1), address(vaultV2), assets, 0, 0, RAY, noSharesPermit, 0, address(0), block.timestamp + address(vaultV1), address(vaultV2), assets, 0, RAY, noSharesPermit, 0, address(0), block.timestamp ); vm.expectRevert(IVaultBundlesV1.AlreadyInitiated.selector); bundles.vaultBundlesV1Migrate( - address(vaultV1), address(vaultV2), assets, 0, 0, RAY, noSharesPermit, 0, address(0), block.timestamp + address(vaultV1), address(vaultV2), assets, 0, RAY, noSharesPermit, 0, address(0), block.timestamp ); } }