diff --git a/contracts/mainnet/connectors/crv_USD/helpers.sol b/contracts/mainnet/connectors/crv_USD/helpers.sol index c0d439c6..0493c6a2 100644 --- a/contracts/mainnet/connectors/crv_USD/helpers.sol +++ b/contracts/mainnet/connectors/crv_USD/helpers.sol @@ -17,7 +17,7 @@ abstract contract Helpers is DSMath, Basic { /** * @dev Get controller address by given collateral asset */ - function getController(address collateral) internal view returns(IController controller) { - controller = IController(ctrFactory.get_controller(collateral, 0)); + function getController(address collateral, uint256 i) internal view returns(IController controller) { + controller = IController(ctrFactory.get_controller(collateral, i)); } } \ No newline at end of file diff --git a/contracts/mainnet/connectors/crv_USD/main.sol b/contracts/mainnet/connectors/crv_USD/main.sol index 9b28857e..92e142a7 100644 --- a/contracts/mainnet/connectors/crv_USD/main.sol +++ b/contracts/mainnet/connectors/crv_USD/main.sol @@ -15,18 +15,20 @@ abstract contract MakerResolver is Helpers, Events { /** * @dev Create loan * @param collateral collateral token address + * @param version controller version * @param amt Amount of collateral to use * @param debt Stablecoin debt to take * @param N Number of bands to deposit into (to do autoliquidation-deliquidation), can be from MIN_TICKS(4) to MAX_TICKS(50) */ function createLoan( - address collateral, + address collateral, + uint256 version, uint256 amt, uint256 debt, uint256 N ) external returns (string memory _eventName, bytes memory _eventParam) { address _collateral = collateral == ethAddr ? wethAddr : collateral; - IController controller = getController(_collateral); + IController controller = getController(_collateral, version); uint256 _amt = amt; uint256 ethAmt; @@ -50,18 +52,20 @@ abstract contract MakerResolver is Helpers, Events { * @dev Add collateral * @notice Add extra collateral to avoid bad liqidations * @param collateral collateral asset address + * @param version controller version * @param amt Amount of collateral to add * @param getId ID to retrieve amt. * @param setId ID stores the collateral amount of tokens added. */ function addCollateral( address collateral, + uint256 version, uint256 amt, uint256 getId, uint256 setId ) external returns (string memory _eventName, bytes memory _eventParam) { address _collateral = collateral == ethAddr ? wethAddr : collateral; - IController controller = getController(_collateral); + IController controller = getController(_collateral, version); uint _amt = getUint(getId, amt); uint ethAmt; @@ -85,18 +89,20 @@ abstract contract MakerResolver is Helpers, Events { * @dev Remove ETH/ERC20_Token Collateral. * @notice Remove some collateral without repaying the debt * @param collateral collateral asset address + * @param version controller version * @param amt Amount of collateral to add * @param getId ID to retrieve amt. * @param setId ID stores the amount of tokens deposited. */ function removeCollateral( address collateral, + uint256 version, uint256 amt, uint256 getId, uint256 setId ) external returns (string memory _eventName, bytes memory _eventParam) { address _collateral = collateral == ethAddr ? wethAddr : collateral; - IController controller = getController(_collateral); + IController controller = getController(_collateral, version); uint _amt = getUint(getId, amt); controller.remove_collateral(_amt, collateral == ethAddr); @@ -110,16 +116,18 @@ abstract contract MakerResolver is Helpers, Events { /** * @dev Borrow more stablecoins while adding more collateral (not necessary) * @param collateral collateral token address + * @param version controller version * @param amt Amount of collateral to add * @param debt Amount of stablecoin debt to take */ function borrowMore( address collateral, + uint256 version, uint256 amt, uint256 debt ) external returns (string memory _eventName, bytes memory _eventParam) { address _collateral = collateral == ethAddr ? wethAddr : collateral; - IController controller = getController(_collateral); + IController controller = getController(_collateral, version); uint _amt = amt; uint ethAmt; @@ -145,18 +153,20 @@ abstract contract MakerResolver is Helpers, Events { * @dev Borrow DAI. * @notice Borrow DAI using a MakerDAO vault * @param collateral collateral token address + * @param version controller version * @param amt The amount of debt to repay. If higher than the current debt - will do full repayment * @param getId ID to retrieve amt. * @param setId ID stores the amount of DAI borrowed. */ function repay( address collateral, + uint256 version, uint256 amt, uint256 getId, uint256 setId ) external payable returns (string memory _eventName, bytes memory _eventParam) { address _collateral = collateral == ethAddr ? wethAddr : collateral; - IController controller = getController(_collateral); + IController controller = getController(_collateral, version); uint _amt = amt; TokenInterface stableCoin = TokenInterface(CRV_USD); @@ -173,14 +183,16 @@ abstract contract MakerResolver is Helpers, Events { /** * @dev Peform a bad liquidation (or self-liquidation) of user if health is not good * @param collateral collateral token address + * @param version controller version * @param min_x Minimal amount of stablecoin to receive (to avoid liquidators being sandwiched) */ function liquidate( address collateral, + uint256 version, uint256 min_x ) external payable returns (string memory _eventName, bytes memory _eventParam) { address _collateral = collateral == ethAddr ? wethAddr : collateral; - IController controller = getController(_collateral); + IController controller = getController(_collateral, version); controller.liquidate(address(this), min_x, collateral == ethAddr); diff --git a/test/mainnet/crv_usd/crv_usd.test.ts b/test/mainnet/crv_usd/crv_usd.test.ts index 25932004..265308e2 100644 --- a/test/mainnet/crv_usd/crv_usd.test.ts +++ b/test/mainnet/crv_usd/crv_usd.test.ts @@ -174,7 +174,7 @@ describe("CRV USD", function () { { connector: connectorName, method: "createLoan", - args: [tokens.sfrxeth.address, ethers.utils.parseEther('1').toString(), ethers.utils.parseEther('1000'), 10] + args: [tokens.sfrxeth.address, "0", ethers.utils.parseEther('1').toString(), ethers.utils.parseEther('1000'), 10] } ]; @@ -192,7 +192,7 @@ describe("CRV USD", function () { { connector: connectorName, method: "addCollateral", - args: [tokens.sfrxeth.address, ethers.utils.parseEther('1').toString(), 0, 0] + args: [tokens.sfrxeth.address, "0", ethers.utils.parseEther('1').toString(), 0, 0] } ]; @@ -210,7 +210,7 @@ describe("CRV USD", function () { { connector: connectorName, method: "removeCollateral", - args: [tokens.sfrxeth.address, ethers.utils.parseEther('1').toString(), 0, 0] + args: [tokens.sfrxeth.address, "0", ethers.utils.parseEther('1').toString(), 0, 0] } ]; @@ -228,7 +228,7 @@ describe("CRV USD", function () { { connector: connectorName, method: "borrowMore", - args: [tokens.sfrxeth.address, '0', ethers.utils.parseEther('50')] + args: [tokens.sfrxeth.address, "0", '0', ethers.utils.parseEther('50')] } ]; @@ -246,7 +246,7 @@ describe("CRV USD", function () { { connector: connectorName, method: "borrowMore", - args: [tokens.sfrxeth.address, ethers.utils.parseEther('2'), dsaMaxValue] + args: [tokens.sfrxeth.address, "0", ethers.utils.parseEther('2'), dsaMaxValue] } ]; @@ -263,7 +263,7 @@ describe("CRV USD", function () { { connector: connectorName, method: "createLoan", - args: [tokens.sfrxeth.address, ethers.utils.parseEther('1').toString(), dsaMaxValue, 10] + args: [tokens.sfrxeth.address, "0", ethers.utils.parseEther('1').toString(), dsaMaxValue, 10] } ]; @@ -275,7 +275,7 @@ describe("CRV USD", function () { { connector: connectorName, method: "createLoan", - args: [tokens.sfrxeth.address, ethers.utils.parseEther('1').toString(), dsaMaxValue, 10] + args: [tokens.sfrxeth.address, "0", ethers.utils.parseEther('1').toString(), dsaMaxValue, 10] } ]; @@ -294,7 +294,7 @@ describe("CRV USD", function () { { connector: connectorName, method: "createLoan", - args: [tokens.sfrxeth.address, dsaMaxValue, dsaMaxValue, 10] + args: [tokens.sfrxeth.address, "0", dsaMaxValue, dsaMaxValue, 10] } ]; @@ -316,7 +316,7 @@ describe("CRV USD", function () { { connector: connectorName, method: "createLoan", - args: [tokens.eth.address, ethers.utils.parseEther('2').toString(), dsaMaxValue, 10] + args: [tokens.eth.address, "0", ethers.utils.parseEther('2').toString(), dsaMaxValue, 10] } ]; @@ -335,7 +335,7 @@ describe("CRV USD", function () { { connector: connectorName, method: "addCollateral", - args: [tokens.eth.address, ethers.utils.parseEther('3').toString(), 0, 0] + args: [tokens.eth.address, "0", ethers.utils.parseEther('3').toString(), 0, 0] } ]; @@ -353,7 +353,7 @@ describe("CRV USD", function () { { connector: connectorName, method: "removeCollateral", - args: [tokens.eth.address, ethers.utils.parseEther('1').toString(), 0, 0] + args: [tokens.eth.address, "0", ethers.utils.parseEther('1').toString(), 0, 0] } ]; @@ -371,7 +371,7 @@ describe("CRV USD", function () { { connector: connectorName, method: "borrowMore", - args: [tokens.eth.address, '0', ethers.utils.parseEther('10')] + args: [tokens.eth.address, "0", '0', ethers.utils.parseEther('10')] } ]; @@ -389,7 +389,7 @@ describe("CRV USD", function () { { connector: connectorName, method: "borrowMore", - args: [tokens.eth.address, '0', dsaMaxValue] + args: [tokens.eth.address, "0", '0', dsaMaxValue] } ];