From 77cabf01a57e0d74b45f7fe233b0058b86fc0cd2 Mon Sep 17 00:00:00 2001 From: JChoy Date: Thu, 30 Nov 2023 16:01:19 +0900 Subject: [PATCH 1/4] feat: BorrowController.adjustPosition => adjust --- contracts/BorrowController.sol | 2 +- contracts/interfaces/IBorrowController.sol | 2 +- .../integration/BorrowController.t.sol | 28 +++++++++---------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/contracts/BorrowController.sol b/contracts/BorrowController.sol index 9293eb0..9dabbb0 100644 --- a/contracts/BorrowController.sol +++ b/contracts/BorrowController.sol @@ -126,7 +126,7 @@ contract BorrowController is IBorrowController, Controller, IPositionLocker { _loanPositionManager.transferFrom(address(this), msg.sender, positionId); } - function adjustPosition( + function adjust( uint256 positionId, uint256 collateralAmount, uint256 debtAmount, diff --git a/contracts/interfaces/IBorrowController.sol b/contracts/interfaces/IBorrowController.sol index c9cc37a..cbb8e86 100644 --- a/contracts/interfaces/IBorrowController.sol +++ b/contracts/interfaces/IBorrowController.sol @@ -27,7 +27,7 @@ interface IBorrowController is IController { ERC20PermitParams calldata collateralPermitParams ) external payable; - function adjustPosition( + function adjust( uint256 positionId, uint256 collateralAmount, uint256 debtAmount, diff --git a/test/foundry/integration/BorrowController.t.sol b/test/foundry/integration/BorrowController.t.sol index 7d496b2..34c44d9 100644 --- a/test/foundry/integration/BorrowController.t.sol +++ b/test/foundry/integration/BorrowController.t.sol @@ -235,7 +235,7 @@ contract BorrowControllerIntegrationTest is Test, CloberMarketSwapCallbackReceiv vm.signPermit(1, loanPositionManager, address(borrowController), positionId); IBorrowController.SwapParams memory swapParams; vm.prank(user); - borrowController.adjustPosition( + borrowController.adjust( positionId, beforeLoanPosition.collateralAmount, beforeLoanPosition.debtAmount + 0.5 ether, @@ -275,7 +275,7 @@ contract BorrowControllerIntegrationTest is Test, CloberMarketSwapCallbackReceiv ); IBorrowController.SwapParams memory swapParams; vm.prank(user); - borrowController.adjustPosition( + borrowController.adjust( positionId, beforeLoanPosition.collateralAmount + collateralAmount, beforeLoanPosition.debtAmount, @@ -313,7 +313,7 @@ contract BorrowControllerIntegrationTest is Test, CloberMarketSwapCallbackReceiv IBorrowController.SwapParams memory swapParams; vm.prank(user); - borrowController.adjustPosition( + borrowController.adjust( positionId, beforeLoanPosition.collateralAmount - collateralAmount, beforeLoanPosition.debtAmount, @@ -353,7 +353,7 @@ contract BorrowControllerIntegrationTest is Test, CloberMarketSwapCallbackReceiv IBorrowController.SwapParams memory swapParams; vm.startPrank(user); weth.approve(address(borrowController), maxPayInterest); - borrowController.adjustPosition{value: maxPayInterest}( + borrowController.adjust{value: maxPayInterest}( positionId, beforeLoanPosition.collateralAmount, beforeLoanPosition.debtAmount, @@ -390,7 +390,7 @@ contract BorrowControllerIntegrationTest is Test, CloberMarketSwapCallbackReceiv IBorrowController.SwapParams memory swapParams; vm.prank(user); - borrowController.adjustPosition( + borrowController.adjust( positionId, beforeLoanPosition.collateralAmount, beforeLoanPosition.debtAmount, @@ -428,7 +428,7 @@ contract BorrowControllerIntegrationTest is Test, CloberMarketSwapCallbackReceiv IBorrowController.SwapParams memory swapParams; vm.prank(user); - borrowController.adjustPosition{value: repayAmount}( + borrowController.adjust{value: repayAmount}( positionId, beforeLoanPosition.collateralAmount, beforeLoanPosition.debtAmount - repayAmount, @@ -466,7 +466,7 @@ contract BorrowControllerIntegrationTest is Test, CloberMarketSwapCallbackReceiv IBorrowController.SwapParams memory swapParams; vm.prank(user); - borrowController.adjustPosition{value: repayAmount}( + borrowController.adjust{value: repayAmount}( positionId, beforeLoanPosition.collateralAmount, beforeLoanPosition.debtAmount - repayAmount, @@ -571,7 +571,7 @@ contract BorrowControllerIntegrationTest is Test, CloberMarketSwapCallbackReceiv swapParams.inSubstitute = address(wausdc); vm.prank(user); - borrowController.adjustPosition{value: 0.16 ether}( + borrowController.adjust{value: 0.16 ether}( positionId, loanPosition.collateralAmount + collateralAmount, loanPosition.debtAmount + debtAmount, @@ -624,7 +624,7 @@ contract BorrowControllerIntegrationTest is Test, CloberMarketSwapCallbackReceiv vm.signPermit(1, loanPositionManager, address(borrowController), positionId); vm.prank(user); - borrowController.adjustPosition( + borrowController.adjust( positionId, beforeLoanPosition.collateralAmount - collateralAmount, debtAmount, @@ -675,7 +675,7 @@ contract BorrowControllerIntegrationTest is Test, CloberMarketSwapCallbackReceiv vm.signPermit(1, loanPositionManager, address(borrowController), positionId); vm.prank(user); - borrowController.adjustPosition( + borrowController.adjust( positionId, beforeLoanPosition.collateralAmount - collateralAmount, 0, @@ -726,7 +726,7 @@ contract BorrowControllerIntegrationTest is Test, CloberMarketSwapCallbackReceiv vm.signPermit(1, loanPositionManager, address(borrowController), positionId); vm.prank(user); - borrowController.adjustPosition( + borrowController.adjust( positionId, beforeLoanPosition.collateralAmount - collateralAmount, maxDebtAmount, @@ -765,7 +765,7 @@ contract BorrowControllerIntegrationTest is Test, CloberMarketSwapCallbackReceiv IBorrowController.SwapParams memory swapParams; vm.prank(user); vm.expectRevert(abi.encodeWithSelector(ILoanPositionManagerTypes.FullRepaymentRequired.selector)); - borrowController.adjustPosition( + borrowController.adjust( positionId, beforeLoanPosition.collateralAmount, beforeLoanPosition.debtAmount + 0.5 ether, @@ -790,7 +790,7 @@ contract BorrowControllerIntegrationTest is Test, CloberMarketSwapCallbackReceiv IBorrowController.SwapParams memory swapParams; vm.prank(user); vm.expectRevert(abi.encodeWithSelector(ILoanPositionManagerTypes.FullRepaymentRequired.selector)); - borrowController.adjustPosition( + borrowController.adjust( positionId, beforeLoanPosition.collateralAmount - collateralAmount, beforeLoanPosition.debtAmount, @@ -813,7 +813,7 @@ contract BorrowControllerIntegrationTest is Test, CloberMarketSwapCallbackReceiv IBorrowController.SwapParams memory swapParams; vm.expectRevert(abi.encodeWithSelector(IController.InvalidAccess.selector)); - borrowController.adjustPosition( + borrowController.adjust( positionId, beforeLoanPosition.collateralAmount - collateralAmount, beforeLoanPosition.debtAmount, From 150259f575600e316026cd20b69a697228835eec Mon Sep 17 00:00:00 2001 From: JChoy Date: Thu, 30 Nov 2023 16:02:03 +0900 Subject: [PATCH 2/4] feat: return positionId at controller --- contracts/BorrowController.sol | 4 ++-- contracts/DepositController.sol | 6 +++--- contracts/interfaces/IBorrowController.sol | 2 +- contracts/interfaces/IDepositController.sol | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/contracts/BorrowController.sol b/contracts/BorrowController.sol index 9dabbb0..979b3ac 100644 --- a/contracts/BorrowController.sol +++ b/contracts/BorrowController.sol @@ -113,13 +113,13 @@ contract BorrowController is IBorrowController, Controller, IPositionLocker { Epoch expiredWith, SwapParams calldata swapParams, ERC20PermitParams calldata collateralPermitParams - ) external payable nonReentrant wrapETH { + ) external payable nonReentrant wrapETH returns (uint256 positionId) { collateralPermitParams.tryPermit(_getUnderlyingToken(collateralToken), msg.sender, address(this)); bytes memory lockData = abi.encode(collateralAmount, debtAmount, expiredWith, maxPayInterest); lockData = abi.encode(0, msg.sender, swapParams, abi.encode(collateralToken, debtToken, lockData)); bytes memory result = _loanPositionManager.lock(lockData); - uint256 positionId = abi.decode(result, (uint256)); + positionId = abi.decode(result, (uint256)); _burnAllSubstitute(collateralToken, msg.sender); _burnAllSubstitute(debtToken, msg.sender); diff --git a/contracts/DepositController.sol b/contracts/DepositController.sol index 52f0265..7c3d2bd 100644 --- a/contracts/DepositController.sol +++ b/contracts/DepositController.sol @@ -87,15 +87,15 @@ contract DepositController is IDepositController, Controller, IPositionLocker { uint16 lockEpochs, int256 minEarnInterest, ERC20PermitParams calldata tokenPermitParams - ) external payable nonReentrant wrapETH { + ) external payable nonReentrant wrapETH returns (uint256 positionId) { tokenPermitParams.tryPermit(_getUnderlyingToken(asset), msg.sender, address(this)); bytes memory lockData = abi.encode(amount, EpochLibrary.current().add(lockEpochs - 1), -minEarnInterest); bytes memory result = _bondPositionManager.lock(abi.encode(0, msg.sender, abi.encode(asset, lockData))); - uint256 id = abi.decode(result, (uint256)); + positionId = abi.decode(result, (uint256)); _burnAllSubstitute(asset, msg.sender); - _bondPositionManager.transferFrom(address(this), msg.sender, id); + _bondPositionManager.transferFrom(address(this), msg.sender, positionId); } function withdraw( diff --git a/contracts/interfaces/IBorrowController.sol b/contracts/interfaces/IBorrowController.sol index cbb8e86..b190a93 100644 --- a/contracts/interfaces/IBorrowController.sol +++ b/contracts/interfaces/IBorrowController.sol @@ -25,7 +25,7 @@ interface IBorrowController is IController { Epoch expiredWith, SwapParams calldata swapParams, ERC20PermitParams calldata collateralPermitParams - ) external payable; + ) external payable returns (uint256 positionId); function adjust( uint256 positionId, diff --git a/contracts/interfaces/IDepositController.sol b/contracts/interfaces/IDepositController.sol index 71704ed..9679209 100644 --- a/contracts/interfaces/IDepositController.sol +++ b/contracts/interfaces/IDepositController.sol @@ -14,7 +14,7 @@ interface IDepositController is IController { uint16 lockEpochs, int256 minEarnInterest, ERC20PermitParams calldata tokenPermitParams - ) external payable; + ) external payable returns (uint256 positionId); function withdraw( uint256 positionId, From de14249e139c8d5f39d9ac74dafd582300119f93 Mon Sep 17 00:00:00 2001 From: JChoy Date: Thu, 30 Nov 2023 16:15:18 +0900 Subject: [PATCH 3/4] feat: merge DepositController's functions into adjust() --- contracts/DepositController.sol | 31 +++----- contracts/interfaces/IDepositController.sol | 15 ++-- .../integration/DepositController.t.sol | 76 ++++++++++++++----- 3 files changed, 77 insertions(+), 45 deletions(-) diff --git a/contracts/DepositController.sol b/contracts/DepositController.sol index 7c3d2bd..bf57132 100644 --- a/contracts/DepositController.sol +++ b/contracts/DepositController.sol @@ -84,12 +84,12 @@ contract DepositController is IDepositController, Controller, IPositionLocker { function deposit( address asset, uint256 amount, - uint16 lockEpochs, - int256 minEarnInterest, + Epoch expiredWith, + int256 maxPayInterest, ERC20PermitParams calldata tokenPermitParams ) external payable nonReentrant wrapETH returns (uint256 positionId) { tokenPermitParams.tryPermit(_getUnderlyingToken(asset), msg.sender, address(this)); - bytes memory lockData = abi.encode(amount, EpochLibrary.current().add(lockEpochs - 1), -minEarnInterest); + bytes memory lockData = abi.encode(amount, expiredWith, maxPayInterest); bytes memory result = _bondPositionManager.lock(abi.encode(0, msg.sender, abi.encode(asset, lockData))); positionId = abi.decode(result, (uint256)); @@ -98,32 +98,21 @@ contract DepositController is IDepositController, Controller, IPositionLocker { _bondPositionManager.transferFrom(address(this), msg.sender, positionId); } - function withdraw( + function adjust( uint256 positionId, - uint256 withdrawAmount, + uint256 amount, + Epoch expiredWith, int256 maxPayInterest, + ERC20PermitParams calldata tokenPermitParams, PermitSignature calldata positionPermitParams - ) external nonReentrant onlyPositionOwner(positionId) { + ) external payable nonReentrant wrapETH onlyPositionOwner(positionId) { positionPermitParams.tryPermit(_bondPositionManager, positionId, address(this)); BondPosition memory position = _bondPositionManager.getPosition(positionId); + tokenPermitParams.tryPermit(position.asset, msg.sender, address(this)); - bytes memory lockData = abi.encode(position.amount - withdrawAmount, position.expiredWith, maxPayInterest); + bytes memory lockData = abi.encode(amount, expiredWith, maxPayInterest); _bondPositionManager.lock(abi.encode(positionId, msg.sender, lockData)); _burnAllSubstitute(position.asset, msg.sender); } - - function collect(uint256 positionId, PermitSignature calldata positionPermitParams) - external - nonReentrant - onlyPositionOwner(positionId) - { - positionPermitParams.tryPermit(_bondPositionManager, positionId, address(this)); - BondPosition memory position = _bondPositionManager.getPosition(positionId); - if (position.expiredWith >= EpochLibrary.current()) revert NotExpired(); - - _bondPositionManager.lock(abi.encode(positionId, msg.sender, abi.encode(0, position.expiredWith, 0, 0))); - - _burnAllSubstitute(position.asset, msg.sender); - } } diff --git a/contracts/interfaces/IDepositController.sol b/contracts/interfaces/IDepositController.sol index 9679209..111b876 100644 --- a/contracts/interfaces/IDepositController.sol +++ b/contracts/interfaces/IDepositController.sol @@ -4,6 +4,7 @@ pragma solidity ^0.8.0; import {IController} from "./IController.sol"; import {ERC20PermitParams, PermitSignature} from "../libraries/PermitParams.sol"; +import {Epoch} from "../libraries/Epoch.sol"; interface IDepositController is IController { error NotExpired(); @@ -11,17 +12,17 @@ interface IDepositController is IController { function deposit( address token, uint256 amount, - uint16 lockEpochs, + Epoch expiredWith, int256 minEarnInterest, ERC20PermitParams calldata tokenPermitParams ) external payable returns (uint256 positionId); - function withdraw( + function adjust( uint256 positionId, - uint256 withdrawAmount, - int256 maxPayInterest, + uint256 amount, + Epoch expiredWith, + int256 minEarnInterest, + ERC20PermitParams calldata tokenPermitParams, PermitSignature calldata positionPermitParams - ) external; - - function collect(uint256 positionId, PermitSignature calldata positionPermitParams) external; + ) external payable; } diff --git a/test/foundry/integration/DepositController.t.sol b/test/foundry/integration/DepositController.t.sol index 5a6825b..f6a5047 100644 --- a/test/foundry/integration/DepositController.t.sol +++ b/test/foundry/integration/DepositController.t.sol @@ -182,7 +182,7 @@ contract DepositControllerIntegrationTest is Test, CloberMarketSwapCallbackRecei depositController.deposit( wausdc, amount, - 2, + EpochLibrary.current().add(1), 0, vm.signPermit(1, IERC20Permit(Constants.USDC), address(depositController), amount - 100000) ); @@ -208,7 +208,9 @@ contract DepositControllerIntegrationTest is Test, CloberMarketSwapCallbackRecei vm.signPermit(1, IERC20Permit(Constants.USDC), address(depositController), amount); vm.expectRevert(abi.encodeWithSelector(IController.ControllerSlippage.selector)); vm.prank(user); - depositController.deposit(wausdc, amount, 2, int256(amount * 4 / 100), permitParams); + depositController.deposit( + wausdc, amount, EpochLibrary.current().add(1), -int256(amount * 4 / 100), permitParams + ); } function testDepositOverCloberMarket() public { @@ -217,7 +219,7 @@ contract DepositControllerIntegrationTest is Test, CloberMarketSwapCallbackRecei ERC20PermitParams memory permitParams = vm.signPermit(1, IERC20Permit(Constants.USDC), address(depositController), amount); vm.prank(user); - depositController.deposit(wausdc, amount, 2, 0, permitParams); + depositController.deposit(wausdc, amount, EpochLibrary.current().add(1), 0, permitParams); assertEq(couponManager.balanceOf(user, couponKeys[0].toId()), 1995445908, "COUPON0_BALANCE"); assertEq(couponManager.balanceOf(user, couponKeys[1].toId()), 1995445908, "COUPON0_BALANCE"); @@ -230,7 +232,9 @@ contract DepositControllerIntegrationTest is Test, CloberMarketSwapCallbackRecei uint256 beforeBalance = user.balance; uint256 tokenId = bondPositionManager.nextId(); - depositController.deposit{value: amount}(waweth, amount, 2, 0, emptyERC20PermitParams); + depositController.deposit{value: amount}( + waweth, amount, EpochLibrary.current().add(1), 0, emptyERC20PermitParams + ); BondPosition memory position = bondPositionManager.getPosition(tokenId); @@ -251,16 +255,22 @@ contract DepositControllerIntegrationTest is Test, CloberMarketSwapCallbackRecei uint256 amount = usdc.amount(10); uint256 tokenId = bondPositionManager.nextId(); depositController.deposit( - wausdc, amount, 2, 0, vm.signPermit(1, IERC20Permit(Constants.USDC), address(depositController), amount) + wausdc, + amount, + EpochLibrary.current().add(1), + 0, + vm.signPermit(1, IERC20Permit(Constants.USDC), address(depositController), amount) ); BondPosition memory beforePosition = bondPositionManager.getPosition(tokenId); uint256 beforeBalance = usdc.balanceOf(user); - depositController.withdraw( + depositController.adjust( tokenId, amount / 2, + beforePosition.expiredWith, type(int256).max, + emptyERC20PermitParams, vm.signPermit(1, bondPositionManager, address(depositController), tokenId) ); @@ -277,7 +287,9 @@ contract DepositControllerIntegrationTest is Test, CloberMarketSwapCallbackRecei beforeBalance = usdc.balanceOf(user); beforePosition = afterPosition; - depositController.withdraw(tokenId, beforePosition.amount, type(int256).max, emptyERC721PermitParams); + depositController.adjust( + tokenId, 0, beforePosition.expiredWith, type(int256).max, emptyERC20PermitParams, emptyERC721PermitParams + ); afterPosition = bondPositionManager.getPosition(tokenId); @@ -299,16 +311,22 @@ contract DepositControllerIntegrationTest is Test, CloberMarketSwapCallbackRecei uint256 amount = usdc.amount(10); uint256 tokenId = bondPositionManager.nextId(); depositController.deposit( - wausdc, amount, 2, 0, vm.signPermit(1, IERC20Permit(Constants.USDC), address(depositController), amount) + wausdc, + amount, + EpochLibrary.current().add(1), + 0, + vm.signPermit(1, IERC20Permit(Constants.USDC), address(depositController), amount) ); BondPosition memory beforePosition = bondPositionManager.getPosition(tokenId); uint256 beforeBalance = usdc.balanceOf(user); - depositController.withdraw( + depositController.adjust( tokenId, - amount - 1, + 1, + beforePosition.expiredWith, type(int256).max, + emptyERC20PermitParams, vm.signPermit(1, bondPositionManager, address(depositController), tokenId) ); @@ -328,15 +346,19 @@ contract DepositControllerIntegrationTest is Test, CloberMarketSwapCallbackRecei vm.startPrank(user); uint256 amount = 10 ether; uint256 tokenId = bondPositionManager.nextId(); - depositController.deposit{value: amount}(waweth, amount, 2, 0, emptyERC20PermitParams); + depositController.deposit{value: amount}( + waweth, amount, EpochLibrary.current().add(1), 0, emptyERC20PermitParams + ); BondPosition memory beforePosition = bondPositionManager.getPosition(tokenId); uint256 beforeBalance = user.balance; - depositController.withdraw( + depositController.adjust( tokenId, amount / 2, + beforePosition.expiredWith, type(int256).max, + emptyERC20PermitParams, vm.signPermit(1, bondPositionManager, address(depositController), tokenId) ); @@ -353,7 +375,9 @@ contract DepositControllerIntegrationTest is Test, CloberMarketSwapCallbackRecei beforeBalance = user.balance; beforePosition = afterPosition; - depositController.withdraw(tokenId, beforePosition.amount, type(int256).max, emptyERC721PermitParams); + depositController.adjust( + tokenId, 0, beforePosition.expiredWith, type(int256).max, emptyERC20PermitParams, emptyERC721PermitParams + ); afterPosition = bondPositionManager.getPosition(tokenId); @@ -375,14 +399,25 @@ contract DepositControllerIntegrationTest is Test, CloberMarketSwapCallbackRecei uint256 amount = usdc.amount(10); uint256 tokenId = bondPositionManager.nextId(); depositController.deposit( - wausdc, amount, 1, 0, vm.signPermit(1, IERC20Permit(Constants.USDC), address(depositController), amount) + wausdc, + amount, + EpochLibrary.current(), + 0, + vm.signPermit(1, IERC20Permit(Constants.USDC), address(depositController), amount) ); vm.warp(EpochLibrary.current().add(1).startTime()); BondPosition memory beforePosition = bondPositionManager.getPosition(tokenId); uint256 beforeBalance = usdc.balanceOf(user); - depositController.collect(tokenId, vm.signPermit(1, bondPositionManager, address(depositController), tokenId)); + depositController.adjust( + tokenId, + 0, + beforePosition.expiredWith, + 0, + emptyERC20PermitParams, + vm.signPermit(1, bondPositionManager, address(depositController), tokenId) + ); BondPosition memory afterPosition = bondPositionManager.getPosition(tokenId); @@ -401,13 +436,20 @@ contract DepositControllerIntegrationTest is Test, CloberMarketSwapCallbackRecei vm.startPrank(user); uint256 amount = 10 ether; uint256 tokenId = bondPositionManager.nextId(); - depositController.deposit{value: amount}(waweth, amount, 1, 0, emptyERC20PermitParams); + depositController.deposit{value: amount}(waweth, amount, EpochLibrary.current(), 0, emptyERC20PermitParams); vm.warp(EpochLibrary.current().add(1).startTime()); BondPosition memory beforePosition = bondPositionManager.getPosition(tokenId); uint256 beforeBalance = user.balance; - depositController.collect(tokenId, vm.signPermit(1, bondPositionManager, address(depositController), tokenId)); + depositController.adjust( + tokenId, + 0, + beforePosition.expiredWith, + 0, + emptyERC20PermitParams, + vm.signPermit(1, bondPositionManager, address(depositController), tokenId) + ); BondPosition memory afterPosition = bondPositionManager.getPosition(tokenId); From 2aca1de9a7f0b565af6fb3808e98c38ca9ed214f Mon Sep 17 00:00:00 2001 From: JChoy Date: Thu, 30 Nov 2023 17:09:46 +0900 Subject: [PATCH 4/4] feat: change interest name at DepositController --- contracts/DepositController.sol | 8 ++++---- contracts/interfaces/IBorrowController.sol | 1 - contracts/interfaces/IDepositController.sol | 4 +--- test/foundry/integration/DepositController.t.sol | 4 +--- 4 files changed, 6 insertions(+), 11 deletions(-) diff --git a/contracts/DepositController.sol b/contracts/DepositController.sol index bf57132..4d271a3 100644 --- a/contracts/DepositController.sol +++ b/contracts/DepositController.sol @@ -85,11 +85,11 @@ contract DepositController is IDepositController, Controller, IPositionLocker { address asset, uint256 amount, Epoch expiredWith, - int256 maxPayInterest, + int256 minEarnInterest, ERC20PermitParams calldata tokenPermitParams ) external payable nonReentrant wrapETH returns (uint256 positionId) { tokenPermitParams.tryPermit(_getUnderlyingToken(asset), msg.sender, address(this)); - bytes memory lockData = abi.encode(amount, expiredWith, maxPayInterest); + bytes memory lockData = abi.encode(amount, expiredWith, -minEarnInterest); bytes memory result = _bondPositionManager.lock(abi.encode(0, msg.sender, abi.encode(asset, lockData))); positionId = abi.decode(result, (uint256)); @@ -102,7 +102,7 @@ contract DepositController is IDepositController, Controller, IPositionLocker { uint256 positionId, uint256 amount, Epoch expiredWith, - int256 maxPayInterest, + int256 interestThreshold, ERC20PermitParams calldata tokenPermitParams, PermitSignature calldata positionPermitParams ) external payable nonReentrant wrapETH onlyPositionOwner(positionId) { @@ -110,7 +110,7 @@ contract DepositController is IDepositController, Controller, IPositionLocker { BondPosition memory position = _bondPositionManager.getPosition(positionId); tokenPermitParams.tryPermit(position.asset, msg.sender, address(this)); - bytes memory lockData = abi.encode(amount, expiredWith, maxPayInterest); + bytes memory lockData = abi.encode(amount, expiredWith, interestThreshold); _bondPositionManager.lock(abi.encode(positionId, msg.sender, lockData)); _burnAllSubstitute(position.asset, msg.sender); diff --git a/contracts/interfaces/IBorrowController.sol b/contracts/interfaces/IBorrowController.sol index b190a93..8d8af0e 100644 --- a/contracts/interfaces/IBorrowController.sol +++ b/contracts/interfaces/IBorrowController.sol @@ -14,7 +14,6 @@ interface IBorrowController is IController { } error CollateralSwapFailed(string reason); - error InvalidDebtAmount(); function borrow( address collateralToken, diff --git a/contracts/interfaces/IDepositController.sol b/contracts/interfaces/IDepositController.sol index 111b876..df9e0c3 100644 --- a/contracts/interfaces/IDepositController.sol +++ b/contracts/interfaces/IDepositController.sol @@ -7,8 +7,6 @@ import {ERC20PermitParams, PermitSignature} from "../libraries/PermitParams.sol" import {Epoch} from "../libraries/Epoch.sol"; interface IDepositController is IController { - error NotExpired(); - function deposit( address token, uint256 amount, @@ -21,7 +19,7 @@ interface IDepositController is IController { uint256 positionId, uint256 amount, Epoch expiredWith, - int256 minEarnInterest, + int256 interestThreshold, ERC20PermitParams calldata tokenPermitParams, PermitSignature calldata positionPermitParams ) external payable; diff --git a/test/foundry/integration/DepositController.t.sol b/test/foundry/integration/DepositController.t.sol index f6a5047..aeff54b 100644 --- a/test/foundry/integration/DepositController.t.sol +++ b/test/foundry/integration/DepositController.t.sol @@ -208,9 +208,7 @@ contract DepositControllerIntegrationTest is Test, CloberMarketSwapCallbackRecei vm.signPermit(1, IERC20Permit(Constants.USDC), address(depositController), amount); vm.expectRevert(abi.encodeWithSelector(IController.ControllerSlippage.selector)); vm.prank(user); - depositController.deposit( - wausdc, amount, EpochLibrary.current().add(1), -int256(amount * 4 / 100), permitParams - ); + depositController.deposit(wausdc, amount, EpochLibrary.current().add(1), int256(amount * 4 / 100), permitParams); } function testDepositOverCloberMarket() public {