From 45ab9219ba099f7a54516fbcbc9bad3fef5c8b86 Mon Sep 17 00:00:00 2001 From: pradyuman-verma Date: Sat, 27 Nov 2021 18:10:43 +0530 Subject: [PATCH] refactored code --- .../polygon/connectors/qidao/helpers.sol | 105 +++++++++- contracts/polygon/connectors/qidao/main.sol | 187 +++++++++--------- 2 files changed, 195 insertions(+), 97 deletions(-) diff --git a/contracts/polygon/connectors/qidao/helpers.sol b/contracts/polygon/connectors/qidao/helpers.sol index 7f5b6a8a..6af8eaba 100644 --- a/contracts/polygon/connectors/qidao/helpers.sol +++ b/contracts/polygon/connectors/qidao/helpers.sol @@ -1,8 +1,107 @@ pragma solidity ^0.7.0; -import { DSMath } from "../../common/math.sol"; -import { Basic } from "../../common/basic.sol"; +import {DSMath} from "../../common/math.sol"; +import {Basic} from "../../common/basic.sol"; + +import {TokenInterface} from "../../common/interfaces.sol"; +import {Stores} from "../../common/stores.sol"; +import {erc20StablecoinInterface, maticStablecoinInterface} from "./interface.sol"; abstract contract Helpers is DSMath, Basic { - + address internal constant MAI = 0xa3Fa99A148fA48D14Ed51d610c367C61876997F1; + + function getVaultId(address vaultAddress, uint256 setId) + public + returns (uint256 vaultId) + { + erc20StablecoinInterface vault = erc20StablecoinInterface(vaultAddress); + vaultId = vault.createVault(); + setUint(setId, vaultId); + } + + function _destroyVault( + address vaultAddress, + uint256 vaultId, + uint256 getId + ) public returns (uint256 _vaultId) { + erc20StablecoinInterface vault = erc20StablecoinInterface(vaultAddress); + uint256 _vaultId = getUint(getId, vaultId); + vault.destroyVault(_vaultId); + } + + function _deposit( + address token, + address vaultAddress, + uint256 vaultId, + uint256 amt + ) public { + bool isEth = token == maticAddr; + + if (isEth) { + maticStablecoinInterface vault = maticStablecoinInterface( + vaultAddress + ); + vault.depositCollateral{value: amt}(vaultId); + } else { + erc20StablecoinInterface vault = erc20StablecoinInterface( + vaultAddress + ); + TokenInterface tokenContract = TokenInterface(token); + approve(tokenContract, address(vault), amt); + vault.depositCollateral(vaultId, amt); + } + } + + function _withdraw( + address token, + address vaultAddress, + uint256 vaultId, + uint256 amt + ) public returns (uint256 initialBal, uint256 finalBal) { + bool isEth = token == maticAddr; + + if (isEth) { + initialBal = address(this).balance; + maticStablecoinInterface vault = maticStablecoinInterface( + vaultAddress + ); + + vault.withdrawCollateral(vaultId, amt); + finalBal = address(this).balance; + } else { + TokenInterface tokenContract = TokenInterface(token); + erc20StablecoinInterface vault = erc20StablecoinInterface( + vaultAddress + ); + + initialBal = tokenContract.balanceOf(address(this)); + + approve(tokenContract, address(vault), amt); + vault.withdrawCollateral(vaultId, amt); + finalBal = tokenContract.balanceOf(address(this)); + } + } + + function _borrow( + address vaultAddress, + uint256 vaultId, + uint256 amt + ) public { + erc20StablecoinInterface vault = erc20StablecoinInterface(vaultAddress); + vault.borrowToken(vaultId, amt); + } + + function _payback( + address vaultAddress, + uint256 vaultId, + uint256 amt + ) public { + erc20StablecoinInterface vault = erc20StablecoinInterface(vaultAddress); + + TokenInterface tokenContract = TokenInterface(MAI); + + approve(tokenContract, address(vault), amt); + + vault.payBackToken(vaultId, amt); + } } diff --git a/contracts/polygon/connectors/qidao/main.sol b/contracts/polygon/connectors/qidao/main.sol index e57c6578..c725e6e4 100644 --- a/contracts/polygon/connectors/qidao/main.sol +++ b/contracts/polygon/connectors/qidao/main.sol @@ -1,38 +1,30 @@ pragma solidity ^0.7.0; - /** * @title QiDAo. * @dev Lending & Borrowing. * TODO Update doc Strings */ -import "hardhat/console.sol"; - -import { TokenInterface } from "../../common/interfaces.sol"; -import { Stores } from "../../common/stores.sol"; -import { Helpers } from "./helpers.sol"; -import { Events } from "./events.sol"; -import { erc20StablecoinInterface, maticStablecoinInterface } from "./interface.sol"; +import {Stores} from "../../common/stores.sol"; +import {Helpers} from "./helpers.sol"; +import {Events} from "./events.sol"; abstract contract QiDaoResolver is Events, Helpers { - - address constant internal MAI = 0xa3Fa99A148fA48D14Ed51d610c367C61876997F1; - /** * @dev Create a vault * @notice Create a vault on QiDao * @param vaultAddress The address of the vault smart contract for the token/asset * @param setId ID of the created vault. - */ - function createVault(address vaultAddress, uint256 setId) external payable returns (string memory _eventName, bytes memory _eventParam) { - erc20StablecoinInterface vault = erc20StablecoinInterface(vaultAddress); - uint256 vaultId = vault.createVault(); - - setUint(setId, vaultId); - + */ + function createVault(address vaultAddress, uint256 setId) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _vaultId = getVaultId(vaultAddress, setId); _eventName = "LogCreateVault(uint256, address)"; - _eventParam = abi.encode(vaultId, address(this)); + _eventParam = abi.encode(_vaultId, address(this)); } /** @@ -41,17 +33,21 @@ abstract contract QiDaoResolver is Events, Helpers { * @param vaultAddress The address of the vault smart contract for the token/asset * @param vaultId The NFT ID which identifies the vault to be interacted with * @param getId ID to retrieve vaultId. - */ - function destroyVault(address vaultAddress, uint256 vaultId, uint256 getId) external payable returns (string memory _eventName, bytes memory _eventParam) { - erc20StablecoinInterface vault = erc20StablecoinInterface(vaultAddress); - uint256 _vaultId = getUint(getId, vaultId); - vault.destroyVault(_vaultId); - + */ + function destroyVault( + address vaultAddress, + uint256 vaultId, + uint256 getId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _vaultId = _destroyVault(vaultAddress, vaultId, getId); _eventName = "LogDestroyVault(uint256, address)"; _eventParam = abi.encode(_vaultId, address(this)); } - /** * @dev Deposit MATIC/ERC20_Token. * @notice Deposit a token to QiDao for lending / collaterization. @@ -63,7 +59,7 @@ abstract contract QiDaoResolver is Events, Helpers { * @param setVaultId ID stores the vault being interacted with. * @param getAmtId ID to retrieve amt. * @param setAmtId ID stores the amount of tokens withdrawn. - */ + */ function deposit( address token, address vaultAddress, @@ -73,29 +69,28 @@ abstract contract QiDaoResolver is Events, Helpers { uint256 setVaultId, uint256 getAmtId, uint256 setAmtId -) external payable returns (string memory _eventName, bytes memory _eventParam) { + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getAmtId, amt); + uint256 _vaultId = getUint(getVaultId, vaultId); - uint _amt = getUint(getAmtId, amt); - uint _vaultId = getUint(getVaultId, vaultId); - - bool isEth = token == maticAddr; - - if(isEth){ - maticStablecoinInterface vault = maticStablecoinInterface(vaultAddress); - vault.depositCollateral{value: _amt}(_vaultId); - } - else { - erc20StablecoinInterface vault = erc20StablecoinInterface(vaultAddress); - TokenInterface tokenContract = TokenInterface(token); - approve(tokenContract, address(vault), _amt); - vault.depositCollateral(_vaultId, _amt); - } + _deposit(token, vaultAddress, _vaultId, _amt); setUint(setAmtId, _amt); setUint(getVaultId, _vaultId); _eventName = "LogDepositCollateral(uint256, uint256, uint256, uint256, uint256, uint256)"; - _eventParam = abi.encode(_vaultId, _amt, getVaultId, setVaultId, getAmtId, setAmtId); + _eventParam = abi.encode( + _vaultId, + _amt, + getVaultId, + setVaultId, + getAmtId, + setAmtId + ); } /** @@ -109,7 +104,7 @@ abstract contract QiDaoResolver is Events, Helpers { * @param setVaultId ID stores the vault being interacted with. * @param getAmtId ID to retrieve amt. * @param setAmtId ID stores the amount of tokens withdrawn. - */ + */ function withdraw( address token, address vaultAddress, @@ -119,40 +114,29 @@ abstract contract QiDaoResolver is Events, Helpers { uint256 setVaultId, uint256 getAmtId, uint256 setAmtId - ) external payable returns (string memory _eventName, bytes memory _eventParam) { - uint _amt = getUint(getAmtId, amt); - uint _vaultId = getUint(getVaultId, vaultId); - - bool isEth = token == maticAddr; - - uint initialBal; - uint finalBal; - - if(isEth){ - initialBal = address(this).balance; - maticStablecoinInterface vault = maticStablecoinInterface(vaultAddress); - - vault.withdrawCollateral(_vaultId, _amt); - finalBal = address(this).balance; - } - else { - TokenInterface tokenContract = TokenInterface(token); - erc20StablecoinInterface vault = erc20StablecoinInterface(vaultAddress); - - initialBal = tokenContract.balanceOf(address(this)); - - approve(tokenContract, address(vault), _amt); - vault.withdrawCollateral(_vaultId, _amt); - finalBal = tokenContract.balanceOf(address(this)); - } + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getAmtId, amt); + uint256 _vaultId = getUint(getVaultId, vaultId); + (uint256 initialBal, uint256 finalBal) = _withdraw(token, vaultAddress, _vaultId, _amt); _amt = sub(finalBal, initialBal); setUint(setAmtId, _amt); _eventName = "LogWithdrawCollateral(uint256, uint256, uint256, uint256, uint256, uint256)"; - _eventParam = abi.encode(_vaultId, _amt, getVaultId, setVaultId, getAmtId, setAmtId); + _eventParam = abi.encode( + _vaultId, + _amt, + getVaultId, + setVaultId, + getAmtId, + setAmtId + ); } /** @@ -166,7 +150,7 @@ abstract contract QiDaoResolver is Events, Helpers { * @param setVaultId ID stores the vault being interacted with. * @param getAmtId ID to retrieve amt. * @param setAmtId ID stores the amount of tokens withdrawn. - */ + */ function borrow( address vaultAddress, uint256 vaultId, @@ -175,18 +159,28 @@ abstract contract QiDaoResolver is Events, Helpers { uint256 setVaultId, uint256 getAmtId, uint256 setAmtId - ) external payable returns (string memory _eventName, bytes memory _eventParam) { - uint _amt = getUint(getAmtId, amt); - uint _vaultId = getUint(getVaultId, vaultId); + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getAmtId, amt); + uint256 _vaultId = getUint(getVaultId, vaultId); - erc20StablecoinInterface vault = erc20StablecoinInterface(vaultAddress); - vault.borrowToken(_vaultId, _amt); + _borrow(vaultAddress, _vaultId, _amt); setUint(setAmtId, _amt); setUint(getVaultId, _vaultId); _eventName = "LogBorrow(uint256, uint256, uint256, uint256, uint256, uint256);"; - _eventParam = abi.encode(_vaultId, _amt, getVaultId, setVaultId, getAmtId, setAmtId); + _eventParam = abi.encode( + _vaultId, + _amt, + getVaultId, + setVaultId, + getAmtId, + setAmtId + ); } /** @@ -199,7 +193,7 @@ abstract contract QiDaoResolver is Events, Helpers { * @param setVaultId ID stores the vault being interacted with. * @param getAmtId ID to retrieve amt. * @param setAmtId ID stores the amount of tokens withdrawn. - */ + */ function payback( address vaultAddress, uint256 vaultId, @@ -208,26 +202,31 @@ abstract contract QiDaoResolver is Events, Helpers { uint256 setVaultId, uint256 getAmtId, uint256 setAmtId - ) external payable returns (string memory _eventName, bytes memory _eventParam) { - uint _amt = getUint(getAmtId, amt); - uint _vaultId = getUint(getVaultId, vaultId); + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getAmtId, amt); + uint256 _vaultId = getUint(getVaultId, vaultId); - erc20StablecoinInterface vault = erc20StablecoinInterface(vaultAddress); - - TokenInterface tokenContract = TokenInterface(MAI); - - approve(tokenContract, address(vault), _amt); - - vault.payBackToken(_vaultId, _amt); + _payback(vaultAddress, _vaultId, _amt); setUint(setAmtId, _amt); setUint(getVaultId, _vaultId); - _eventName ="LogPayBack(uint256, uint256, uint256, uint256, uint256, uint256)"; - _eventParam = abi.encode(_vaultId, _amt, getVaultId, setVaultId, getAmtId, setAmtId); + _eventName = "LogPayBack(uint256, uint256, uint256, uint256, uint256, uint256)"; + _eventParam = abi.encode( + _vaultId, + _amt, + getVaultId, + setVaultId, + getAmtId, + setAmtId + ); } } -contract ConnectV2QiDaoPolygon is QiDaoResolver{ - string constant public name = "QiDao-v1"; +contract ConnectV2QiDaoPolygon is QiDaoResolver { + string public constant name = "QiDao-v1"; }