diff --git a/contracts/contracts/connectors/ConnectGelatoData.sol b/contracts/contracts/connectors/ConnectGelatoData.sol deleted file mode 100644 index 25cefe9..0000000 --- a/contracts/contracts/connectors/ConnectGelatoData.sol +++ /dev/null @@ -1,63 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity 0.7.4; -pragma experimental ABIEncoderV2; - -import {GelatoBytes} from "../../lib/GelatoBytes.sol"; -import { - AccountInterface, - ConnectorInterface -} from "../../interfaces/InstaDapp/IInstaDapp.sol"; -import { - IConnectInstaPoolV2 -} from "../../interfaces/InstaDapp/connectors/IConnectInstaPoolV2.sol"; - -contract ConnectGelatoData is ConnectorInterface { - using GelatoBytes for bytes; - - // solhint-disable-next-line const-name-snakecase - string public constant override name = "ConnectGelatoData-v1.0"; - uint256 internal immutable _id; - - constructor(uint256 id) { - _id = id; - } - - /// @dev Connector Details - function connectorID() - public - view - override - returns (uint256 _type, uint256 id) - { - (_type, id) = (1, _id); // Should put specific value. - } - - function getDataAndCast(address _target, bytes calldata _data) - public - payable - { - (bool success, bytes memory returndata) = _target.staticcall(_data); - if (!success) { - returndata.revertWithError( - "ConnectGelatoData.getDataAndCast._target:" - ); - } - - (address[] memory targets, bytes[] memory datas) = abi.decode( - returndata, - (address[], bytes[]) - ); - - // Instapool V2 / FlashLoan call - bytes memory castData = abi.encodeWithSelector( - AccountInterface.cast.selector, - targets, - datas, - msg.sender // msg.sender == GelatoCore - ); - - (success, returndata) = address(this).delegatecall(castData); - if (!success) - returndata.revertWithError("ConnectGelatoData.getDataAndCast:"); - } -} diff --git a/contracts/contracts/gelato/data_generators/DebtBridgeFromMakerForFullRefinance.sol b/contracts/contracts/connectors/ConnectGelatoDataForFullRefinance.sol similarity index 61% rename from contracts/contracts/gelato/data_generators/DebtBridgeFromMakerForFullRefinance.sol rename to contracts/contracts/connectors/ConnectGelatoDataForFullRefinance.sol index d6ed06e..0ee8b7e 100644 --- a/contracts/contracts/gelato/data_generators/DebtBridgeFromMakerForFullRefinance.sol +++ b/contracts/contracts/connectors/ConnectGelatoDataForFullRefinance.sol @@ -2,53 +2,122 @@ pragma solidity 0.7.4; pragma experimental ABIEncoderV2; -import {sub} from "../../../vendor/DSMath.sol"; +import {GelatoBytes} from "../../lib/GelatoBytes.sol"; +import {sub} from "../../vendor/DSMath.sol"; import { - _getMakerVaultDebt, - _getMakerVaultCollateralBalance -} from "../../../functions/dapps/FMaker.sol"; + AccountInterface, + ConnectorInterface +} from "../../interfaces/InstaDapp/IInstaDapp.sol"; +import { + IConnectInstaPoolV2 +} from "../../interfaces/InstaDapp/connectors/IConnectInstaPoolV2.sol"; import { DAI, CONNECT_MAKER, CONNECT_COMPOUND, INSTA_POOL_V2 -} from "../../../constants/CInstaDapp.sol"; +} from "../../constants/CInstaDapp.sol"; +import { + _getMakerVaultDebt, + _getMakerVaultCollateralBalance +} from "../../functions/dapps/FMaker.sol"; +import { + _encodeFlashPayback +} from "../../functions/InstaDapp/connectors/FInstaPoolV2.sol"; import { _encodePaybackMakerVault, _encodedWithdrawMakerVault, _encodeOpenMakerVault, _encodedDepositMakerVault, _encodeBorrowDaiMakerVault -} from "../../../functions/InstaDapp/connectors/FConnectMaker.sol"; +} from "../../functions/InstaDapp/connectors/FConnectMaker.sol"; +import { + _encodePayGelatoProvider +} from "../../functions/InstaDapp/connectors/FConnectGelatoProviderPayment.sol"; import { _encodeDepositCompound, _encodeBorrowCompound -} from "../../../functions/InstaDapp/connectors/FConnectCompound.sol"; -import { - _encodePayGelatoProvider -} from "../../../functions/InstaDapp/connectors/FConnectGelatoProviderPayment.sol"; -import { - _encodeFlashPayback -} from "../../../functions/InstaDapp/connectors/FInstaPoolV2.sol"; -import {_getGelatoProviderFees} from "../../../functions/gelato/FGelato.sol"; -import { - IConnectInstaPoolV2 -} from "../../../interfaces/InstaDapp/connectors/IConnectInstaPoolV2.sol"; +} from "../../functions/InstaDapp/connectors/FConnectCompound.sol"; +import {_getGelatoProviderFees} from "../../functions/gelato/FGelato.sol"; -/// @title DebtBridgeFromMakerForFullRefinance -/// @notice Task Generator contract that generate task for a full refinancing from maker protocol to another protocol (can be Maker). -/// @author Gelato Team -contract DebtBridgeFromMakerForFullRefinance { - uint256 public constant GAS_COST = 1490779 + (14908 * 2); // 1933080 + ~2% (Estimated Value) +contract ConnectGelatoDataForFullRefinance is ConnectorInterface { + using GelatoBytes for bytes; - // To retrieve when the connector is deployed and replace with the address of the deployed instance - address public immutable connectGelatoProviderPayment; + // solhint-disable-next-line const-name-snakecase + string public constant override name = "ConnectGelatoData-v1.0"; + uint256 internal immutable _id; + address internal immutable _connectGelatoProviderPayment; - constructor(address _connectGelatoProviderPayment) { - connectGelatoProviderPayment = _connectGelatoProviderPayment; + uint256 public constant GAS_COST = 1490779 + (14908 * 2); // 1490779 + ~2% (Estimated Value) + + constructor(uint256 id, address connectGelatoProviderPayment) { + _id = id; + _connectGelatoProviderPayment = connectGelatoProviderPayment; } - /* solhint-disable function-max-lines */ + /// @dev Connector Details + function connectorID() + public + view + override + returns (uint256 _type, uint256 id) + { + (_type, id) = (1, _id); // Should put specific value. + } + + function getDataAndCastForFromMakerToMaker( + uint256 _vaultId, + address _token, + string memory _colType, + address _provider + ) public payable { + ( + address[] memory targets, + bytes[] memory datas + ) = _execPayloadForFullRefinanceFromMakerToMaker( + _vaultId, + _token, + _colType, + _provider + ); + + _cast(targets, datas); + } + + function getDataAndCastForFromMakerToCompound( + uint256 _vaultId, + address _token, + address _provider + ) public payable { + ( + address[] memory targets, + bytes[] memory datas + ) = _execPayloadForFullRefinanceFromMakerToCompound( + _vaultId, + _token, + _provider + ); + + _cast(targets, datas); + } + + function _cast(address[] memory targets, bytes[] memory datas) internal { + // Instapool V2 / FlashLoan call + bytes memory castData = abi.encodeWithSelector( + AccountInterface.cast.selector, + targets, + datas, + msg.sender // msg.sender == GelatoCore + ); + + (bool success, bytes memory returndata) = address(this).delegatecall( + castData + ); + if (!success) + returndata.revertWithError( + "ConnectGelatoDataForFullRefinance._cast:" + ); + } /// @notice Generate Task for a full refinancing between Maker to Compound. /// @param _vaultId Id of the unsafe vault of the client. @@ -56,11 +125,11 @@ contract DebtBridgeFromMakerForFullRefinance { /// @param _provider address of the paying provider. /// @return targets : flashloan contract address /// @return datas : calldata for flashloan - function execPayloadForFullRefinanceFromMakerToCompound( + function _execPayloadForFullRefinanceFromMakerToCompound( uint256 _vaultId, address _token, address _provider - ) public view returns (address[] memory targets, bytes[] memory datas) { + ) internal view returns (address[] memory targets, bytes[] memory datas) { targets = new address[](1); targets[0] = INSTA_POOL_V2; @@ -75,7 +144,7 @@ contract DebtBridgeFromMakerForFullRefinance { _targets[1] = CONNECT_MAKER; // withdraw _targets[2] = CONNECT_COMPOUND; // deposit _targets[3] = CONNECT_COMPOUND; // borrow - _targets[4] = connectGelatoProviderPayment; + _targets[4] = _connectGelatoProviderPayment; _targets[5] = INSTA_POOL_V2; bytes[] memory _datas = new bytes[](6); @@ -114,12 +183,12 @@ contract DebtBridgeFromMakerForFullRefinance { /// @param _provider address of the paying provider. /// @return targets : flashloan contract address /// @return datas : calldata for flashloan - function execPayloadForFullRefinanceFromMakerToMaker( + function _execPayloadForFullRefinanceFromMakerToMaker( uint256 _vaultId, address _token, string memory _colType, address _provider - ) public view returns (address[] memory targets, bytes[] memory datas) { + ) internal view returns (address[] memory targets, bytes[] memory datas) { targets = new address[](1); targets[0] = INSTA_POOL_V2; @@ -135,7 +204,7 @@ contract DebtBridgeFromMakerForFullRefinance { _targets[2] = CONNECT_MAKER; // open ETH-B vault _targets[3] = CONNECT_MAKER; // deposit _targets[4] = CONNECT_MAKER; // borrow - _targets[5] = connectGelatoProviderPayment; + _targets[5] = _connectGelatoProviderPayment; _targets[6] = targets[0]; bytes[] memory _datas = new bytes[](7); @@ -167,47 +236,4 @@ contract DebtBridgeFromMakerForFullRefinance { abi.encode(_targets, _datas) ); } - - /* solhint-enable function-max-lines */ - - /// @notice Generate Data for calling execPayloadForFullRefinanceFromMakerToMaker via a static call. - /// @param _vaultId Id of the unsafe vault of the client. - /// @param _token vault's col token address . - /// @param _colType colType of the new vault, exemple : ETH-B, ETH-A. - /// @param _provider address of the paying provider. - /// @return a call data for a static call of execPayloadForFullRefinanceFromMakerToMaker. - function getDebtBridgeFullRefinanceMakerToMakerData( - uint256 _vaultId, - address _token, - string memory _colType, - address _provider - ) public pure returns (bytes memory) { - return - abi.encodeWithSelector( - this.execPayloadForFullRefinanceFromMakerToMaker.selector, - _vaultId, - _token, - _colType, - _provider - ); - } - - /// @notice Generate Data for calling execPayloadForFullRefinanceFromMakerToCompound via a static call. - /// @param _vaultId Id of the unsafe vault of the client. - /// @param _token vault's col token address . - /// @param _provider address of the paying provider. - /// @return a call data for a static call of execPayloadForFullRefinanceFromMakerToMaker. - function getDebtBridgeFullRefinanceMakerToCompoundData( - uint256 _vaultId, - address _token, - address _provider - ) public pure returns (bytes memory) { - return - abi.encodeWithSelector( - this.execPayloadForFullRefinanceFromMakerToCompound.selector, - _vaultId, - _token, - _provider - ); - } } diff --git a/contracts/contracts/gelato/data_generators/DebtBridgeFromMakerForPartialRefinance.sol b/contracts/contracts/connectors/ConnectGelatoDataForPartialRefinance.sol similarity index 54% rename from contracts/contracts/gelato/data_generators/DebtBridgeFromMakerForPartialRefinance.sol rename to contracts/contracts/connectors/ConnectGelatoDataForPartialRefinance.sol index fb4805a..32defe1 100644 --- a/contracts/contracts/gelato/data_generators/DebtBridgeFromMakerForPartialRefinance.sol +++ b/contracts/contracts/connectors/ConnectGelatoDataForPartialRefinance.sol @@ -2,50 +2,49 @@ pragma solidity 0.7.4; pragma experimental ABIEncoderV2; -import {GelatoBytes} from "../../../lib/GelatoBytes.sol"; -import {sub, wmul} from "../../../vendor/DSMath.sol"; +import {GelatoBytes} from "../../lib/GelatoBytes.sol"; +import {sub, wmul} from "../../vendor/DSMath.sol"; import { - _getMakerVaultDebt, - _getMakerVaultCollateralBalance -} from "../../../functions/dapps/FMaker.sol"; + AccountInterface, + ConnectorInterface +} from "../../interfaces/InstaDapp/IInstaDapp.sol"; +import { + IConnectInstaPoolV2 +} from "../../interfaces/InstaDapp/connectors/IConnectInstaPoolV2.sol"; import { DAI, CONNECT_MAKER, CONNECT_COMPOUND, INSTA_POOL_V2 -} from "../../../constants/CInstaDapp.sol"; +} from "../../constants/CInstaDapp.sol"; +import { + _getMakerVaultDebt, + _getMakerVaultCollateralBalance +} from "../../functions/dapps/FMaker.sol"; +import { + _encodeFlashPayback +} from "../../functions/InstaDapp/connectors/FInstaPoolV2.sol"; import { _encodePaybackMakerVault, _encodedWithdrawMakerVault, _encodeOpenMakerVault, _encodedDepositMakerVault, _encodeBorrowDaiMakerVault -} from "../../../functions/InstaDapp/connectors/FConnectMaker.sol"; +} from "../../functions/InstaDapp/connectors/FConnectMaker.sol"; +import { + _encodePayGelatoProvider +} from "../../functions/InstaDapp/connectors/FConnectGelatoProviderPayment.sol"; import { _encodeDepositCompound, _encodeBorrowCompound -} from "../../../functions/InstaDapp/connectors/FConnectCompound.sol"; -import { - _encodePayGelatoProvider -} from "../../../functions/InstaDapp/connectors/FConnectGelatoProviderPayment.sol"; -import { - _encodeFlashPayback -} from "../../../functions/InstaDapp/connectors/FInstaPoolV2.sol"; -import {_getGelatoProviderFees} from "../../../functions/gelato/FGelato.sol"; +} from "../../functions/InstaDapp/connectors/FConnectCompound.sol"; +import {_getGelatoProviderFees} from "../../functions/gelato/FGelato.sol"; import { _wCalcCollateralToWithdraw, _wCalcDebtToRepay -} from "../../../functions/gelato/FGelatoDebtBridge.sol"; -import { - IConnectInstaPoolV2 -} from "../../../interfaces/InstaDapp/connectors/IConnectInstaPoolV2.sol"; - -/// @title DebtBridgeFromMakerForPartialRefinance -/// @notice Task Generator contract that generate task for a full refinancing from maker protocol to another protocol (can be Maker). -/// @author Gelato Team -contract DebtBridgeFromMakerForPartialRefinance { - using GelatoBytes for bytes; +} from "../../functions/gelato/FGelatoDebtBridge.sol"; +contract ConnectGelatoDataForPartialRefinance is ConnectorInterface { struct PartialDebtBridgePayload { uint256 vaultId; address token; @@ -56,16 +55,70 @@ contract DebtBridgeFromMakerForPartialRefinance { address provider; } - uint256 public constant GAS_COST = 1490779 + (14908 * 2); // 1933080 + ~2% (Estimated Value) + using GelatoBytes for bytes; - // To retrieve when the connector is deployed and replace with the address of the deployed instance - address public immutable connectGelatoProviderPayment; + // solhint-disable-next-line const-name-snakecase + string public constant override name = "ConnectGelatoData-v1.0"; + uint256 internal immutable _id; + address internal immutable _connectGelatoProviderPayment; - constructor(address _connectGelatoProviderPayment) { - connectGelatoProviderPayment = _connectGelatoProviderPayment; + uint256 public constant GAS_COST = 1490779 + (14908 * 2); // 1490779 + ~2% (Estimated Value) + + constructor(uint256 id, address connectGelatoProviderPayment) { + _id = id; + _connectGelatoProviderPayment = connectGelatoProviderPayment; } - /* solhint-disable function-max-lines */ + /// @dev Connector Details + function connectorID() + public + view + override + returns (uint256 _type, uint256 id) + { + (_type, id) = (1, _id); // Should put specific value. + } + + function getDataAndCastForFromMakerToMaker( + PartialDebtBridgePayload calldata _payload, + string memory _colType + ) public payable { + ( + address[] memory targets, + bytes[] memory datas + ) = _execPayloadForPartialRefinanceFromMakerToMaker(_payload, _colType); + + _cast(targets, datas); + } + + function getDataAndCastForFromMakerToCompound( + PartialDebtBridgePayload calldata _payload + ) public payable { + ( + address[] memory targets, + bytes[] memory datas + ) = _execPayloadForPartialRefinanceFromMakerToCompound(_payload); + + _cast(targets, datas); + } + + function _cast(address[] memory targets, bytes[] memory datas) internal { + // Instapool V2 / FlashLoan call + bytes memory castData = abi.encodeWithSelector( + AccountInterface.cast.selector, + targets, + datas, + msg.sender // msg.sender == GelatoCore + ); + + (bool success, bytes memory returndata) = address(this).delegatecall( + castData + ); + if (!success) + returndata.revertWithError( + "ConnectGelatoDataForPartialRefinance._cast:" + ); + } /// @notice Generate Task for a full refinancing between Maker to Compound. /// @param _payload contain : @@ -80,9 +133,9 @@ contract DebtBridgeFromMakerForPartialRefinance { // @param _provider address of the paying provider. /// @return targets : flashloan contract address /// @return datas : calldata for flashloan - function execPayloadForPartialRefinanceFromMakerToCompound( + function _execPayloadForPartialRefinanceFromMakerToCompound( PartialDebtBridgePayload calldata _payload - ) public view returns (address[] memory targets, bytes[] memory datas) { + ) internal view returns (address[] memory targets, bytes[] memory datas) { targets = new address[](1); targets[0] = INSTA_POOL_V2; @@ -90,7 +143,7 @@ contract DebtBridgeFromMakerForPartialRefinance { uint256 wDaiDebtToMove, uint256 wColToWithdrawFromMaker, uint256 gasFeesPaidFromCol - ) = computeDebtBridge( + ) = _computeDebtBridge( _payload.vaultId, _payload.wMinColRatioMaker, _payload.wMinColRatioB, @@ -103,7 +156,7 @@ contract DebtBridgeFromMakerForPartialRefinance { _targets[1] = CONNECT_MAKER; // withdraw _targets[2] = CONNECT_COMPOUND; // deposit _targets[3] = CONNECT_COMPOUND; // borrow - _targets[4] = connectGelatoProviderPayment; + _targets[4] = _connectGelatoProviderPayment; _targets[5] = INSTA_POOL_V2; bytes[] memory _datas = new bytes[](6); @@ -159,10 +212,10 @@ contract DebtBridgeFromMakerForPartialRefinance { /// @param _colType colType of the new vault, exemple : ETH-B, ETH-A. /// @return targets : flashloan contract address /// @return datas : calldata for flashloan - function execPayloadForPartialRefinanceFromMakerToMaker( + function _execPayloadForPartialRefinanceFromMakerToMaker( PartialDebtBridgePayload calldata _payload, string memory _colType - ) public view returns (address[] memory targets, bytes[] memory datas) { + ) internal view returns (address[] memory targets, bytes[] memory datas) { targets = new address[](1); targets[0] = INSTA_POOL_V2; @@ -170,7 +223,7 @@ contract DebtBridgeFromMakerForPartialRefinance { uint256 wDaiDebtToMove, uint256 wColToWithdrawFromMaker, uint256 gasFeesPaidFromCol - ) = computeDebtBridge( + ) = _computeDebtBridge( _payload.vaultId, _payload.wMinColRatioMaker, _payload.wMinColRatioB, @@ -184,7 +237,7 @@ contract DebtBridgeFromMakerForPartialRefinance { _targets[2] = CONNECT_MAKER; // open ETH-B vault _targets[3] = CONNECT_MAKER; // deposit _targets[4] = CONNECT_MAKER; // borrow - _targets[5] = connectGelatoProviderPayment; + _targets[5] = _connectGelatoProviderPayment; _targets[6] = INSTA_POOL_V2; bytes[] memory _datas = new bytes[](7); @@ -227,8 +280,6 @@ contract DebtBridgeFromMakerForPartialRefinance { ); } - /* solhint-enable function-max-lines */ - /// @notice Computes values needed for DebtBridge Maker->ProtocolB /// @dev Use wad for colRatios. /// @param _vaultId The id of the makerDAO vault. @@ -242,16 +293,15 @@ contract DebtBridgeFromMakerForPartialRefinance { /// @return wColToWithdrawFromMaker (wad) to: withdraw from Maker and deposit on B. /// @return gasFeesPaidFromCol Gelato automation-gas-fees paid from user's collateral // solhint-disable function-max-lines - function computeDebtBridge( + function _computeDebtBridge( uint256 _vaultId, uint256 _wMinColRatioMaker, uint256 _wMinColRatioB, address _priceOracle, bytes calldata _oraclePayload ) - public + internal view - virtual returns ( uint256 wDaiDebtToMove, uint256 wColToWithdrawFromMaker, @@ -267,7 +317,8 @@ contract DebtBridgeFromMakerForPartialRefinance { ); if (!success) { - returndata.revertWithError( + GelatoBytes.revertWithError( + returndata, "ConnectGelatoPartialDebtBridgeFromMaker.computeDebtBridge:oracle:" ); } @@ -286,7 +337,7 @@ contract DebtBridgeFromMakerForPartialRefinance { uint256 wDaiDebtOnMaker = _getMakerVaultDebt(_vaultId); - wColToWithdrawFromMaker = wCalcCollateralToWithdraw( + wColToWithdrawFromMaker = _wCalcCollateralToWithdraw( _wMinColRatioMaker, _wMinColRatioB, wColPrice, @@ -294,131 +345,11 @@ contract DebtBridgeFromMakerForPartialRefinance { wDaiDebtOnMaker ); - wDaiDebtToMove = wCalcDebtToRepay( + wDaiDebtToMove = _wCalcDebtToRepay( _wMinColRatioMaker, _wMinColRatioB, wPricedCol, wDaiDebtOnMaker ); } - - /// @notice Compute collateral (wad) to move from Maker to B. - /// @dev Convenience API for frontends - check _wCalcDebtToRepay for implementation - /// @param _wMinColRatioMaker Min col ratio (wad) on Maker debt position - /// @param _wMinColRatioB Min col ratio (wad) on debt position B (e.g. Compound, Maker, ...) - /// @param _wColPrice Price of the collateral (wad) in oracle price units. - /// @param _wPricedCol Collateral to move (wad) valued in oracle price. - /// @param _wDaiDebtOnMaker Amount of DAI (wad) borrowed from Maker. - /// @return collateral to withdraw from A in wad - function wCalcCollateralToWithdraw( - uint256 _wMinColRatioMaker, - uint256 _wMinColRatioB, - uint256 _wColPrice, - uint256 _wPricedCol, - uint256 _wDaiDebtOnMaker - ) public pure virtual returns (uint256) { - return - _wCalcCollateralToWithdraw( - _wMinColRatioMaker, - _wMinColRatioB, - _wColPrice, - _wPricedCol, - _wDaiDebtOnMaker - ); - } - - /// @notice Compute debt (wad) to flashBorrow->repay Maker->withdraw from B->flashPayback - /// @dev Convenience API for frontends - check _wCalcDebtToRepay for implementation. - /// @param _wMinColRatioMaker Min col ratio (wad) on Maker debt position - /// @param _wMinColRatioB Min col ratio (wad) on debt position B (e.g. Compound, Maker, ...) - /// @param _wPricedCol Collateral to move (wad) valued in oracle price. - /// @param _wDaiDebtOnMaker Amount of DAI (wad) borrowed from Maker. - /// @return amount of borrowed token to pay back in wad - function wCalcDebtToRepay( - uint256 _wMinColRatioMaker, - uint256 _wMinColRatioB, - uint256 _wPricedCol, - uint256 _wDaiDebtOnMaker - ) public pure virtual returns (uint256) { - return - _wCalcDebtToRepay( - _wMinColRatioMaker, - _wMinColRatioB, - _wPricedCol, - _wDaiDebtOnMaker - ); - } - - /// @notice Generate Data for calling execPayloadForPartialRefinanceFromMakerToMaker via a static call. - /// @param _vaultId Id of the unsafe vault of the client. - /// @param _token vault's col token address . - /// @param _wMinColRatioMaker Min col ratio (wad) on Maker debt position - /// @param _wMinColRatioB Min col ratio (wad) on debt position B (e.g. Compound, Maker, ...) - /// @param _priceOracle The price oracle contract to supply the collateral price - /// e.g. Maker's ETH/USD oracle for ETH collateral pricing. - /// @param _oraclePayload The data for making the staticcall to the oracle's read - /// method e.g. the function selector of MakerOracle's read function. - /// @param _colType colType of the new vault, exemple : ETH-B, ETH-A. - /// @param _provider address of the paying provider. - /// @return payload for execPayloadForPartialRefinanceFromMakerToMaker. - function getDebtBridgePartialRefinanceMakerToMakerData( - uint256 _vaultId, - address _token, - uint256 _wMinColRatioMaker, - uint256 _wMinColRatioB, - address _priceOracle, - bytes calldata _oraclePayload, - string memory _colType, - address _provider - ) public pure returns (bytes memory) { - return - abi.encodeWithSelector( - this.execPayloadForPartialRefinanceFromMakerToMaker.selector, - PartialDebtBridgePayload({ - vaultId: _vaultId, - token: _token, - wMinColRatioMaker: _wMinColRatioMaker, - wMinColRatioB: _wMinColRatioB, - priceOracle: _priceOracle, - oraclePayload: _oraclePayload, - provider: _provider - }), - _colType - ); - } - - /// @notice Generate Data for calling execPayloadForPartialRefinanceFromMakerToCompound via a static call. - /// @param _vaultId Id of the unsafe vault of the client. - /// @param _token vault's col token address . - /// @param _wMinColRatioMaker Min col ratio (wad) on Maker debt position - /// @param _wMinColRatioB Min col ratio (wad) on debt position B (e.g. Compound, Maker, ...) - /// @param _priceOracle The price oracle contract to supply the collateral price - /// e.g. Maker's ETH/USD oracle for ETH collateral pricing. - /// @param _oraclePayload The data for making the staticcall to the oracle's read - /// method e.g. the function selector of MakerOracle's read function. - /// @param _provider address of the paying provider. - /// @return a call data for a static call of execPayloadForPartialRefinanceFromMakerToMaker. - function getDebtBridgePartialRefinanceMakerToCompoundData( - uint256 _vaultId, - address _token, - uint256 _wMinColRatioMaker, - uint256 _wMinColRatioB, - address _priceOracle, - bytes calldata _oraclePayload, - address _provider - ) public pure returns (bytes memory) { - return - abi.encodeWithSelector( - this.execPayloadForPartialRefinanceFromMakerToCompound.selector, - PartialDebtBridgePayload({ - vaultId: _vaultId, - token: _token, - wMinColRatioMaker: _wMinColRatioMaker, - wMinColRatioB: _wMinColRatioB, - priceOracle: _priceOracle, - oraclePayload: _oraclePayload, - provider: _provider - }) - ); - } } diff --git a/contracts/contracts/gelato/provider_modules/ProviderModuleDSAFromMakerToCompound.sol b/contracts/contracts/gelato/provider_modules/ProviderModuleDsaFromMakerToCompound.sol similarity index 87% rename from contracts/contracts/gelato/provider_modules/ProviderModuleDSAFromMakerToCompound.sol rename to contracts/contracts/gelato/provider_modules/ProviderModuleDsaFromMakerToCompound.sol index d9fa0da..94badb1 100644 --- a/contracts/contracts/gelato/provider_modules/ProviderModuleDSAFromMakerToCompound.sol +++ b/contracts/contracts/gelato/provider_modules/ProviderModuleDsaFromMakerToCompound.sol @@ -10,9 +10,8 @@ import { } from "@gelatonetwork/core/contracts/gelato_core/interfaces/IGelatoCore.sol"; import {AccountInterface} from "../../../interfaces/InstaDapp/IInstaDapp.sol"; import { - DebtBridgeFromMakerForFullRefinance -} from "../../gelato/data_generators/DebtBridgeFromMakerForFullRefinance.sol"; -import {ConnectGelatoData} from "../../connectors/ConnectGelatoData.sol"; + ConnectGelatoDataForFullRefinance +} from "../../connectors/ConnectGelatoDataForFullRefinance.sol"; /// @notice Gelato Provider Module for the InstaDapp DSA /// @dev Used by Provider to sanity check any third-party Tasks they pay for @@ -110,23 +109,18 @@ contract ProviderModuleDsaFromMakerToCompound is GelatoProviderModuleStandard { pure returns (bytes memory) { - address target = abi.decode(_data[4:36], (address)); (uint256 vaultId, address token, ) = abi.decode( - _data[104:], + _data[4:], (uint256, address, address) ); return abi.encodeWithSelector( - ConnectGelatoData.getDataAndCast.selector, - target, - abi.encodeWithSelector( - DebtBridgeFromMakerForFullRefinance - .execPayloadForFullRefinanceFromMakerToCompound - .selector, - vaultId, - token, - _provider - ) + ConnectGelatoDataForFullRefinance + .getDataAndCastForFromMakerToCompound + .selector, + vaultId, + token, + _provider ); } } diff --git a/contracts/contracts/gelato/provider_modules/ProviderModuleDsaFromMakerToMaker.sol b/contracts/contracts/gelato/provider_modules/ProviderModuleDsaFromMakerToMaker.sol index 83bc409..a2e05b6 100644 --- a/contracts/contracts/gelato/provider_modules/ProviderModuleDsaFromMakerToMaker.sol +++ b/contracts/contracts/gelato/provider_modules/ProviderModuleDsaFromMakerToMaker.sol @@ -10,9 +10,8 @@ import { } from "@gelatonetwork/core/contracts/gelato_core/interfaces/IGelatoCore.sol"; import {AccountInterface} from "../../../interfaces/InstaDapp/IInstaDapp.sol"; import { - DebtBridgeFromMakerForFullRefinance -} from "../../gelato/data_generators/DebtBridgeFromMakerForFullRefinance.sol"; -import {ConnectGelatoData} from "../../connectors/ConnectGelatoData.sol"; + ConnectGelatoDataForFullRefinance +} from "../../connectors/ConnectGelatoDataForFullRefinance.sol"; /// @notice Gelato Provider Module for the InstaDapp DSA /// @dev Used by Provider to sanity check any third-party Tasks they pay for @@ -110,26 +109,19 @@ contract ProviderModuleDsaFromMakerToMaker is GelatoProviderModuleStandard { pure returns (bytes memory) { - address target = abi.decode(_data[4:36], (address)); - (uint256 vaultId, address token, string memory colType, ) = abi.decode( - _data[104:], + _data[4:], (uint256, address, string, address) ); - return abi.encodeWithSelector( - ConnectGelatoData.getDataAndCast.selector, - target, - abi.encodeWithSelector( - DebtBridgeFromMakerForFullRefinance - .execPayloadForFullRefinanceFromMakerToMaker - .selector, - vaultId, - token, - colType, - _provider - ) + ConnectGelatoDataForFullRefinance + .getDataAndCastForFromMakerToMaker + .selector, + vaultId, + token, + colType, + _provider ); } } diff --git a/contracts/mocks/FGelatoDebtBridgeMock.sol b/contracts/mocks/FGelatoDebtBridgeMock.sol new file mode 100644 index 0000000..47bbfc9 --- /dev/null +++ b/contracts/mocks/FGelatoDebtBridgeMock.sol @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.7.4; + +import { + _wCalcCollateralToWithdraw, + _wCalcDebtToRepay +} from "../functions/gelato/FGelatoDebtBridge.sol"; + +contract FGelatoDebtBridgeMock { + function wCalcCollateralToWithdraw( + uint256 _wMinColRatioMaker, + uint256 _wMinColRatioB, + uint256 _wColPrice, + uint256 _wPricedCol, + uint256 _wDaiDebtOnMaker + ) public pure returns (uint256) { + return + _wCalcCollateralToWithdraw( + _wMinColRatioMaker, + _wMinColRatioB, + _wColPrice, + _wPricedCol, + _wDaiDebtOnMaker + ); + } + + function wCalcDebtToRepay( + uint256 _wMinColRatioMaker, + uint256 _wMinColRatioB, + uint256 _wPricedCol, + uint256 _wDaiDebtOnMaker + ) public pure returns (uint256) { + return + _wCalcDebtToRepay( + _wMinColRatioMaker, + _wMinColRatioB, + _wPricedCol, + _wDaiDebtOnMaker + ); + } +} diff --git a/test/helpers/Full-Refinance-Maker-To-Compound.helper.js b/test/helpers/Full-Refinance-Maker-To-Compound.helper.js index 7ada4ea..0dd57a1 100644 --- a/test/helpers/Full-Refinance-Maker-To-Compound.helper.js +++ b/test/helpers/Full-Refinance-Maker-To-Compound.helper.js @@ -15,7 +15,7 @@ const getABI = require("./setups/ABI.helper"); const getAllContracts = require("./setups/Contracts-For-Full-Refinancing-Maker-To-Compound.helper"); const enableGelatoConnectorsForFromMaker = require("./setups/Enabling-New-Connectors-For-Full-Refinance.helper"); -const ConnectGelatoDataABI = require("../../artifacts/contracts/contracts/connectors/ConnectGelatoData.sol/ConnectGelatoData.json") +const ConnectGelatoDataForFullRefinance = require("../../artifacts/contracts/contracts/connectors/ConnectGelatoDataForFullRefinance.sol/ConnectGelatoDataForFullRefinance.json") .abi; async function makerToCompoundSetup() { @@ -96,20 +96,14 @@ async function providerWhiteListTaskForMakerToCompound( //#region Actions - const data = await contracts.debtBridgeFromMakerForFullRefinance.getDebtBridgeFullRefinanceMakerToCompoundData( - vaultId, - constants.ETH, - wallets.providerAddress - ); - const spells = []; const debtBridgeCalculationForFullRefinance = new GelatoCoreLib.Action({ addr: contracts.connectGelatoData.address, data: await hre.run("abi-encode-withselector", { - abi: ConnectGelatoDataABI, - functionname: "getDataAndCast", - inputs: [contracts.debtBridgeFromMakerForFullRefinance.address, data], + abi: ConnectGelatoDataForFullRefinance, + functionname: "getDataAndCastForFromMakerToCompound", + inputs: [vaultId, constants.ETH, wallets.providerAddress], }), operation: GelatoCoreLib.Operation.Delegatecall, }); diff --git a/test/helpers/Full-Refinance-Maker-To-Maker.helper.js b/test/helpers/Full-Refinance-Maker-To-Maker.helper.js index 3efd779..5234c4c 100644 --- a/test/helpers/Full-Refinance-Maker-To-Maker.helper.js +++ b/test/helpers/Full-Refinance-Maker-To-Maker.helper.js @@ -16,7 +16,7 @@ const getABI = require("./setups/ABI.helper"); const getAllContracts = require("./setups/Contracts-For-Full-Refinancing-Maker-To-Maker.helper"); const enableGelatoConnectorsForFromMaker = require("./setups/Enabling-New-Connectors-For-Full-Refinance.helper"); -const ConnectGelatoDataABI = require("../../artifacts/contracts/contracts/connectors/ConnectGelatoData.sol/ConnectGelatoData.json") +const ConnectGelatoDataForFullRefinance = require("../../artifacts/contracts/contracts/connectors/ConnectGelatoDataForFullRefinance.sol/ConnectGelatoDataForFullRefinance.json") .abi; async function makerETHAToMakerETHBSetup() { @@ -102,21 +102,14 @@ async function providerWhiteListTaskForMakerETHAToMakerETHB( //#region Actions - const data = await contracts.debtBridgeFromMakerForFullRefinance.getDebtBridgeFullRefinanceMakerToMakerData( - vaultId, - constants.ETH, - "ETH-B", - wallets.providerAddress - ); - const spells = []; const debtBridgeCalculationForFullRefinance = new GelatoCoreLib.Action({ addr: contracts.connectGelatoData.address, data: await hre.run("abi-encode-withselector", { - abi: ConnectGelatoDataABI, - functionname: "getDataAndCast", - inputs: [contracts.debtBridgeFromMakerForFullRefinance.address, data], + abi: ConnectGelatoDataForFullRefinance, + functionname: "getDataAndCastForFromMakerToMaker", + inputs: [vaultId, constants.ETH, "ETH-B", wallets.providerAddress], }), operation: GelatoCoreLib.Operation.Delegatecall, }); diff --git a/test/helpers/setups/Contracts-For-Full-Refinancing-Maker-To-Compound.helper.js b/test/helpers/setups/Contracts-For-Full-Refinancing-Maker-To-Compound.helper.js index 145d077..6ff5d78 100644 --- a/test/helpers/setups/Contracts-For-Full-Refinancing-Maker-To-Compound.helper.js +++ b/test/helpers/setups/Contracts-For-Full-Refinancing-Maker-To-Compound.helper.js @@ -4,26 +4,18 @@ const {ethers} = hre; const getContracts = require("./Common-Contracts.helper"); async function getAllContracts() { - let connectGelatoData; - let debtBridgeFromMakerForFullRefinance; let dsaProviderModule; + let connectGelatoData; let contracts = await getContracts(); const ConnectGelatoData = await ethers.getContractFactory( - "ConnectGelatoData" + "ConnectGelatoDataForFullRefinance" ); connectGelatoData = await ConnectGelatoData.deploy( - (await contracts.instaConnectors.connectorLength()).add(1) - ); - await connectGelatoData.deployed(); - - const DebtBridgeFromMakerForFullRefinance = await ethers.getContractFactory( - "DebtBridgeFromMakerForFullRefinance" - ); - debtBridgeFromMakerForFullRefinance = await DebtBridgeFromMakerForFullRefinance.deploy( + (await contracts.instaConnectors.connectorLength()).add(1), contracts.connectGelatoProviderPayment.address ); - await debtBridgeFromMakerForFullRefinance.deployed(); + await connectGelatoData.deployed(); const ProviderModuleDsa = await ethers.getContractFactory( "ProviderModuleDsaFromMakerToCompound" @@ -34,9 +26,8 @@ async function getAllContracts() { ); await dsaProviderModule.deployed(); - contracts.connectGelatoData = connectGelatoData; - contracts.debtBridgeFromMakerForFullRefinance = debtBridgeFromMakerForFullRefinance; contracts.dsaProviderModule = dsaProviderModule; + contracts.connectGelatoData = connectGelatoData; return contracts; } diff --git a/test/helpers/setups/Contracts-For-Full-Refinancing-Maker-To-Maker.helper.js b/test/helpers/setups/Contracts-For-Full-Refinancing-Maker-To-Maker.helper.js index a383ffc..a702fb0 100644 --- a/test/helpers/setups/Contracts-For-Full-Refinancing-Maker-To-Maker.helper.js +++ b/test/helpers/setups/Contracts-For-Full-Refinancing-Maker-To-Maker.helper.js @@ -4,26 +4,18 @@ const {ethers} = hre; const getContracts = require("./Common-Contracts.helper"); async function getAllContracts() { - let connectGelatoData; - let debtBridgeFromMakerForFullRefinance; let dsaProviderModule; + let connectGelatoData; let contracts = await getContracts(); const ConnectGelatoData = await ethers.getContractFactory( - "ConnectGelatoData" + "ConnectGelatoDataForFullRefinance" ); connectGelatoData = await ConnectGelatoData.deploy( - (await contracts.instaConnectors.connectorLength()).add(1) - ); - await connectGelatoData.deployed(); - - const DebtBridgeFromMakerForFullRefinance = await ethers.getContractFactory( - "DebtBridgeFromMakerForFullRefinance" - ); - debtBridgeFromMakerForFullRefinance = await DebtBridgeFromMakerForFullRefinance.deploy( + (await contracts.instaConnectors.connectorLength()).add(1), contracts.connectGelatoProviderPayment.address ); - await debtBridgeFromMakerForFullRefinance.deployed(); + await connectGelatoData.deployed(); const ProviderModuleDsa = await ethers.getContractFactory( "ProviderModuleDsaFromMakerToMaker" @@ -34,9 +26,8 @@ async function getAllContracts() { ); await dsaProviderModule.deployed(); - contracts.connectGelatoData = connectGelatoData; - contracts.debtBridgeFromMakerForFullRefinance = debtBridgeFromMakerForFullRefinance; contracts.dsaProviderModule = dsaProviderModule; + contracts.connectGelatoData = connectGelatoData; return contracts; } diff --git a/test/unit_tests/6_DebtRefinanceMath.test.js b/test/unit_tests/6_DebtRefinanceMath.test.js index cbc642f..a12fb0e 100644 --- a/test/unit_tests/6_DebtRefinanceMath.test.js +++ b/test/unit_tests/6_DebtRefinanceMath.test.js @@ -23,15 +23,16 @@ describe("Debt Partial Refinance Math Unit Test", function () { process.exit(1); } - let debtBridgeFromMakerForPartialRefinance; + let fGelatoDebtBridgeMock; before(async function () { - const DebtBridgeFromMakerForPartialRefinance = await ethers.getContractFactory( - "DebtBridgeFromMakerForPartialRefinance" + const FGelatoDebtBridgeMock = await ethers.getContractFactory( + "FGelatoDebtBridgeMock" ); - debtBridgeFromMakerForPartialRefinance = await DebtBridgeFromMakerForPartialRefinance.deploy( - ethers.constants.AddressZero - ); - debtBridgeFromMakerForPartialRefinance.deployed(); + fGelatoDebtBridgeMock = await FGelatoDebtBridgeMock + .deploy + //ethers.constants.AddressZero + (); + fGelatoDebtBridgeMock.deployed(); }); it("#1: wCalcCollateralToWithdraw should return the amount of collateral to withdraw on protocol 1 and to put on protocol 2", async function () { @@ -73,7 +74,7 @@ describe("Debt Partial Refinance Math Unit Test", function () { //#endregion expect( - await debtBridgeFromMakerForPartialRefinance.wCalcCollateralToWithdraw( + await fGelatoDebtBridgeMock.wCalcCollateralToWithdraw( minColRatioOnMaker, minColRatioOnPositionB, collateralPrice, @@ -123,7 +124,7 @@ describe("Debt Partial Refinance Math Unit Test", function () { //#endregion expect( - await debtBridgeFromMakerForPartialRefinance.wCalcDebtToRepay( + await fGelatoDebtBridgeMock.wCalcDebtToRepay( minColRatioOnMaker, minColRatioOnPositionB, collateral,