mirror of
https://github.com/Instadapp/dsa-connectors.git
synced 2024-07-29 22:37:00 +00:00
108 lines
3.2 KiB
Solidity
108 lines
3.2 KiB
Solidity
pragma solidity ^0.7.0;
|
|
|
|
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);
|
|
}
|
|
}
|