From c61ff6880bf0cecbabfb8ea1325c6a42d6cfbbc4 Mon Sep 17 00:00:00 2001 From: OxMarco <> Date: Mon, 18 Dec 2023 17:16:53 +0100 Subject: [PATCH] fix l10 --- src/Vault.sol | 14 ++++++++++++-- test/Vault.test.sol | 16 ++++++++++------ 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/Vault.sol b/src/Vault.sol index 63483a84..aee8a612 100644 --- a/src/Vault.sol +++ b/src/Vault.sol @@ -147,6 +147,16 @@ contract Vault is IVault, ERC4626, ERC20Permit { return ERC4626.deposit(_assets, receiver); } + function maxDeposit(address) public view override(IERC4626, ERC4626) returns (uint256) { + if (isLocked) return 0; + return type(uint256).max; + } + + function maxMint(address) public view override(IERC4626, ERC4626) returns (uint256) { + if (isLocked) return 0; + return type(uint256).max; + } + function depositWithPermit( uint256 assets, address receiver, @@ -170,7 +180,7 @@ contract Vault is IVault, ERC4626, ERC20Permit { ) public override(ERC4626, IERC4626) returns (uint256) { // assets cannot be more than the current free liquidity uint256 freeLiq = freeLiquidity(); - if (assets >= freeLiq) revert InsufficientLiquidity(); + if (assets > freeLiq) revert InsufficientLiquidity(); // super.withdraw but we leverage the fact of having already computed freeLiq uint256 supply = totalSupply(); @@ -194,7 +204,7 @@ contract Vault is IVault, ERC4626, ERC20Permit { uint256 supply = totalSupply(); uint256 assets = shares.mulDiv(totalAssetsCache, supply); - if (assets >= freeLiq) revert InsufficientLiquidity(); + if (assets > freeLiq) revert InsufficientLiquidity(); // redeem, now all data have been computed _withdraw(msg.sender, receiver, owner, assets, shares); diff --git a/test/Vault.test.sol b/test/Vault.test.sol index fc1d7635..07ccab74 100644 --- a/test/Vault.test.sol +++ b/test/Vault.test.sol @@ -85,7 +85,7 @@ contract VaultTest is Test { assertTrue(token.balanceOf(tokenSink) == type(uint256).max); } - function testAccess(uint256 shares, uint256 assets, uint256 debt) public { + function testAccess(uint256 assets, uint256 debt) public { vm.startPrank(notOwner); vm.expectRevert(bytes4(keccak256(abi.encodePacked("RestrictedToOwner()")))); vault.setFeeUnlockTime(1000); @@ -422,7 +422,7 @@ contract VaultTest is Test { uint256 shares = 0; vm.startPrank(receiver); - if (withdrawn >= vault.freeLiquidity()) { + if (withdrawn > vault.freeLiquidity()) { vm.expectRevert(bytes4(keccak256(abi.encodePacked("InsufficientLiquidity()")))); vault.withdraw(withdrawn, receiver, receiver); withdrawn = 0; @@ -597,25 +597,29 @@ contract VaultTest is Test { } function testCannotWithdrawMoreThanFreeLiquidity(uint256 amount) public { + vm.assume(amount < type(uint256).max); + vm.startPrank(tokenSink); - token.approve(address(vault), amount); + token.approve(address(vault), type(uint256).max); vault.deposit(amount, receiver); vm.stopPrank(); // withdraw without leaving 1 token unit uint256 vaultBalance = token.balanceOf(address(vault)); vm.expectRevert(IVault.InsufficientLiquidity.selector); - vault.withdraw(vaultBalance, tokenSink, receiver); + vault.withdraw(vaultBalance + 1, tokenSink, receiver); } function testCannotBorrowMoreThanFreeLiquidity(uint256 amount) public { + vm.assume(amount < type(uint256).max); + vm.startPrank(tokenSink); - token.approve(address(vault), amount); + token.approve(address(vault), type(uint256).max); vault.deposit(amount, receiver); vm.stopPrank(); uint256 vaultBalance = token.balanceOf(address(vault)); vm.expectRevert(IVault.InsufficientFreeLiquidity.selector); - vault.borrow(vaultBalance, vaultBalance, address(this)); + vault.borrow(vaultBalance + 1, vaultBalance, address(this)); } }