refactored code

This commit is contained in:
pradyuman-verma 2021-11-27 18:10:43 +05:30 committed by Mark Aiken
parent e15d35de55
commit 45ab9219ba
2 changed files with 195 additions and 97 deletions

View File

@ -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);
}
}

View File

@ -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";
}