mirror of
https://github.com/Instadapp/dsa-connectors.git
synced 2024-07-29 22:37:00 +00:00
refactored code
This commit is contained in:
parent
e15d35de55
commit
45ab9219ba
|
@ -1,8 +1,107 @@
|
||||||
pragma solidity ^0.7.0;
|
pragma solidity ^0.7.0;
|
||||||
|
|
||||||
import { DSMath } from "../../common/math.sol";
|
import {DSMath} from "../../common/math.sol";
|
||||||
import { Basic } from "../../common/basic.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 {
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,38 +1,30 @@
|
||||||
pragma solidity ^0.7.0;
|
pragma solidity ^0.7.0;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @title QiDAo.
|
* @title QiDAo.
|
||||||
* @dev Lending & Borrowing.
|
* @dev Lending & Borrowing.
|
||||||
* TODO Update doc Strings
|
* TODO Update doc Strings
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import "hardhat/console.sol";
|
import {Stores} from "../../common/stores.sol";
|
||||||
|
import {Helpers} from "./helpers.sol";
|
||||||
import { TokenInterface } from "../../common/interfaces.sol";
|
import {Events} from "./events.sol";
|
||||||
import { Stores } from "../../common/stores.sol";
|
|
||||||
import { Helpers } from "./helpers.sol";
|
|
||||||
import { Events } from "./events.sol";
|
|
||||||
import { erc20StablecoinInterface, maticStablecoinInterface } from "./interface.sol";
|
|
||||||
|
|
||||||
abstract contract QiDaoResolver is Events, Helpers {
|
abstract contract QiDaoResolver is Events, Helpers {
|
||||||
|
|
||||||
address constant internal MAI = 0xa3Fa99A148fA48D14Ed51d610c367C61876997F1;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dev Create a vault
|
* @dev Create a vault
|
||||||
* @notice Create a vault on QiDao
|
* @notice Create a vault on QiDao
|
||||||
* @param vaultAddress The address of the vault smart contract for the token/asset
|
* @param vaultAddress The address of the vault smart contract for the token/asset
|
||||||
* @param setId ID of the created vault.
|
* @param setId ID of the created vault.
|
||||||
*/
|
*/
|
||||||
function createVault(address vaultAddress, uint256 setId) external payable returns (string memory _eventName, bytes memory _eventParam) {
|
function createVault(address vaultAddress, uint256 setId)
|
||||||
erc20StablecoinInterface vault = erc20StablecoinInterface(vaultAddress);
|
external
|
||||||
uint256 vaultId = vault.createVault();
|
payable
|
||||||
|
returns (string memory _eventName, bytes memory _eventParam)
|
||||||
setUint(setId, vaultId);
|
{
|
||||||
|
uint256 _vaultId = getVaultId(vaultAddress, setId);
|
||||||
_eventName = "LogCreateVault(uint256, address)";
|
_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 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 vaultId The NFT ID which identifies the vault to be interacted with
|
||||||
* @param getId ID to retrieve vaultId.
|
* @param getId ID to retrieve vaultId.
|
||||||
*/
|
*/
|
||||||
function destroyVault(address vaultAddress, uint256 vaultId, uint256 getId) external payable returns (string memory _eventName, bytes memory _eventParam) {
|
function destroyVault(
|
||||||
erc20StablecoinInterface vault = erc20StablecoinInterface(vaultAddress);
|
address vaultAddress,
|
||||||
uint256 _vaultId = getUint(getId, vaultId);
|
uint256 vaultId,
|
||||||
vault.destroyVault(_vaultId);
|
uint256 getId
|
||||||
|
)
|
||||||
|
external
|
||||||
|
payable
|
||||||
|
returns (string memory _eventName, bytes memory _eventParam)
|
||||||
|
{
|
||||||
|
uint256 _vaultId = _destroyVault(vaultAddress, vaultId, getId);
|
||||||
_eventName = "LogDestroyVault(uint256, address)";
|
_eventName = "LogDestroyVault(uint256, address)";
|
||||||
_eventParam = abi.encode(_vaultId, address(this));
|
_eventParam = abi.encode(_vaultId, address(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dev Deposit MATIC/ERC20_Token.
|
* @dev Deposit MATIC/ERC20_Token.
|
||||||
* @notice Deposit a token to QiDao for lending / collaterization.
|
* @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 setVaultId ID stores the vault being interacted with.
|
||||||
* @param getAmtId ID to retrieve amt.
|
* @param getAmtId ID to retrieve amt.
|
||||||
* @param setAmtId ID stores the amount of tokens withdrawn.
|
* @param setAmtId ID stores the amount of tokens withdrawn.
|
||||||
*/
|
*/
|
||||||
function deposit(
|
function deposit(
|
||||||
address token,
|
address token,
|
||||||
address vaultAddress,
|
address vaultAddress,
|
||||||
|
@ -73,29 +69,28 @@ abstract contract QiDaoResolver is Events, Helpers {
|
||||||
uint256 setVaultId,
|
uint256 setVaultId,
|
||||||
uint256 getAmtId,
|
uint256 getAmtId,
|
||||||
uint256 setAmtId
|
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);
|
_deposit(token, vaultAddress, _vaultId, _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);
|
|
||||||
}
|
|
||||||
|
|
||||||
setUint(setAmtId, _amt);
|
setUint(setAmtId, _amt);
|
||||||
setUint(getVaultId, _vaultId);
|
setUint(getVaultId, _vaultId);
|
||||||
|
|
||||||
_eventName = "LogDepositCollateral(uint256, uint256, uint256, uint256, uint256, uint256)";
|
_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 setVaultId ID stores the vault being interacted with.
|
||||||
* @param getAmtId ID to retrieve amt.
|
* @param getAmtId ID to retrieve amt.
|
||||||
* @param setAmtId ID stores the amount of tokens withdrawn.
|
* @param setAmtId ID stores the amount of tokens withdrawn.
|
||||||
*/
|
*/
|
||||||
function withdraw(
|
function withdraw(
|
||||||
address token,
|
address token,
|
||||||
address vaultAddress,
|
address vaultAddress,
|
||||||
|
@ -119,40 +114,29 @@ abstract contract QiDaoResolver is Events, Helpers {
|
||||||
uint256 setVaultId,
|
uint256 setVaultId,
|
||||||
uint256 getAmtId,
|
uint256 getAmtId,
|
||||||
uint256 setAmtId
|
uint256 setAmtId
|
||||||
) external payable returns (string memory _eventName, bytes memory _eventParam) {
|
)
|
||||||
uint _amt = getUint(getAmtId, amt);
|
external
|
||||||
uint _vaultId = getUint(getVaultId, vaultId);
|
payable
|
||||||
|
returns (string memory _eventName, bytes memory _eventParam)
|
||||||
bool isEth = token == maticAddr;
|
{
|
||||||
|
uint256 _amt = getUint(getAmtId, amt);
|
||||||
uint initialBal;
|
uint256 _vaultId = getUint(getVaultId, vaultId);
|
||||||
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));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
(uint256 initialBal, uint256 finalBal) = _withdraw(token, vaultAddress, _vaultId, _amt);
|
||||||
|
|
||||||
_amt = sub(finalBal, initialBal);
|
_amt = sub(finalBal, initialBal);
|
||||||
|
|
||||||
setUint(setAmtId, _amt);
|
setUint(setAmtId, _amt);
|
||||||
|
|
||||||
_eventName = "LogWithdrawCollateral(uint256, uint256, uint256, uint256, uint256, uint256)";
|
_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 setVaultId ID stores the vault being interacted with.
|
||||||
* @param getAmtId ID to retrieve amt.
|
* @param getAmtId ID to retrieve amt.
|
||||||
* @param setAmtId ID stores the amount of tokens withdrawn.
|
* @param setAmtId ID stores the amount of tokens withdrawn.
|
||||||
*/
|
*/
|
||||||
function borrow(
|
function borrow(
|
||||||
address vaultAddress,
|
address vaultAddress,
|
||||||
uint256 vaultId,
|
uint256 vaultId,
|
||||||
|
@ -175,18 +159,28 @@ abstract contract QiDaoResolver is Events, Helpers {
|
||||||
uint256 setVaultId,
|
uint256 setVaultId,
|
||||||
uint256 getAmtId,
|
uint256 getAmtId,
|
||||||
uint256 setAmtId
|
uint256 setAmtId
|
||||||
) external payable returns (string memory _eventName, bytes memory _eventParam) {
|
)
|
||||||
uint _amt = getUint(getAmtId, amt);
|
external
|
||||||
uint _vaultId = getUint(getVaultId, vaultId);
|
payable
|
||||||
|
returns (string memory _eventName, bytes memory _eventParam)
|
||||||
|
{
|
||||||
|
uint256 _amt = getUint(getAmtId, amt);
|
||||||
|
uint256 _vaultId = getUint(getVaultId, vaultId);
|
||||||
|
|
||||||
erc20StablecoinInterface vault = erc20StablecoinInterface(vaultAddress);
|
_borrow(vaultAddress, _vaultId, _amt);
|
||||||
vault.borrowToken(_vaultId, _amt);
|
|
||||||
|
|
||||||
setUint(setAmtId, _amt);
|
setUint(setAmtId, _amt);
|
||||||
setUint(getVaultId, _vaultId);
|
setUint(getVaultId, _vaultId);
|
||||||
|
|
||||||
_eventName = "LogBorrow(uint256, uint256, uint256, uint256, uint256, uint256);";
|
_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 setVaultId ID stores the vault being interacted with.
|
||||||
* @param getAmtId ID to retrieve amt.
|
* @param getAmtId ID to retrieve amt.
|
||||||
* @param setAmtId ID stores the amount of tokens withdrawn.
|
* @param setAmtId ID stores the amount of tokens withdrawn.
|
||||||
*/
|
*/
|
||||||
function payback(
|
function payback(
|
||||||
address vaultAddress,
|
address vaultAddress,
|
||||||
uint256 vaultId,
|
uint256 vaultId,
|
||||||
|
@ -208,26 +202,31 @@ abstract contract QiDaoResolver is Events, Helpers {
|
||||||
uint256 setVaultId,
|
uint256 setVaultId,
|
||||||
uint256 getAmtId,
|
uint256 getAmtId,
|
||||||
uint256 setAmtId
|
uint256 setAmtId
|
||||||
) external payable returns (string memory _eventName, bytes memory _eventParam) {
|
)
|
||||||
uint _amt = getUint(getAmtId, amt);
|
external
|
||||||
uint _vaultId = getUint(getVaultId, vaultId);
|
payable
|
||||||
|
returns (string memory _eventName, bytes memory _eventParam)
|
||||||
|
{
|
||||||
|
uint256 _amt = getUint(getAmtId, amt);
|
||||||
|
uint256 _vaultId = getUint(getVaultId, vaultId);
|
||||||
|
|
||||||
erc20StablecoinInterface vault = erc20StablecoinInterface(vaultAddress);
|
_payback(vaultAddress, _vaultId, _amt);
|
||||||
|
|
||||||
TokenInterface tokenContract = TokenInterface(MAI);
|
|
||||||
|
|
||||||
approve(tokenContract, address(vault), _amt);
|
|
||||||
|
|
||||||
vault.payBackToken(_vaultId, _amt);
|
|
||||||
|
|
||||||
setUint(setAmtId, _amt);
|
setUint(setAmtId, _amt);
|
||||||
setUint(getVaultId, _vaultId);
|
setUint(getVaultId, _vaultId);
|
||||||
|
|
||||||
_eventName ="LogPayBack(uint256, uint256, uint256, uint256, uint256, uint256)";
|
_eventName = "LogPayBack(uint256, uint256, uint256, uint256, uint256, uint256)";
|
||||||
_eventParam = abi.encode(_vaultId, _amt, getVaultId, setVaultId, getAmtId, setAmtId);
|
_eventParam = abi.encode(
|
||||||
|
_vaultId,
|
||||||
|
_amt,
|
||||||
|
getVaultId,
|
||||||
|
setVaultId,
|
||||||
|
getAmtId,
|
||||||
|
setAmtId
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
contract ConnectV2QiDaoPolygon is QiDaoResolver{
|
contract ConnectV2QiDaoPolygon is QiDaoResolver {
|
||||||
string constant public name = "QiDao-v1";
|
string public constant name = "QiDao-v1";
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user