mirror of
https://github.com/Instadapp/dsa-connectors.git
synced 2024-07-29 22:37:00 +00:00
feat: add fluid contracts
This commit is contained in:
parent
ad56081bd3
commit
89a2d4ea8b
14
contracts/mainnet/connectors/fluid/events.sol
Normal file
14
contracts/mainnet/connectors/fluid/events.sol
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
//SPDX-License-Identifier: MIT
|
||||||
|
pragma solidity ^0.7.0;
|
||||||
|
|
||||||
|
contract Events {
|
||||||
|
event LogOperate (
|
||||||
|
address vaultAddress,
|
||||||
|
uint256 nftId,
|
||||||
|
int256 newCol,
|
||||||
|
int256 newDebt,
|
||||||
|
address to,
|
||||||
|
uint256 getId,
|
||||||
|
uint256 setId
|
||||||
|
);
|
||||||
|
}
|
47
contracts/mainnet/connectors/fluid/interface.sol
Normal file
47
contracts/mainnet/connectors/fluid/interface.sol
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
//SPDX-License-Identifier: MIT
|
||||||
|
pragma solidity ^0.7.0;
|
||||||
|
pragma experimental ABIEncoderV2;
|
||||||
|
|
||||||
|
interface IVault {
|
||||||
|
|
||||||
|
/// @dev Single function which handles supply, withdraw, borrow & payback
|
||||||
|
/// @param nftId_ NFT ID for interaction. If 0 then create new NFT/position.
|
||||||
|
/// @param newCol_ new collateral. If positive then deposit, if negative then withdraw, if 0 then do nohing
|
||||||
|
/// @param newDebt_ new debt. If positive then borrow, if negative then payback, if 0 then do nohing
|
||||||
|
/// @param to_ address where withdraw or borrow should go. If address(0) then msg.sender
|
||||||
|
/// @return nftId_ if 0 then this returns the newly created NFT Id else returns the same NFT ID
|
||||||
|
/// @return final supply amount. Mainly if max withdraw using type(int).min then this is useful to get perfect amount else remain same as newCol_
|
||||||
|
/// @return final borrow amount. Mainly if max payback using type(int).min then this is useful to get perfect amount else remain same as newDebt_
|
||||||
|
function operate(
|
||||||
|
uint256 nftId_, // if 0 then new position
|
||||||
|
int256 newCol_, // if negative then withdraw
|
||||||
|
int256 newDebt_, // if negative then payback
|
||||||
|
address to_ // address at which the borrow & withdraw amount should go to. If address(0) then it'll go to msg.sender
|
||||||
|
)
|
||||||
|
external
|
||||||
|
returns (
|
||||||
|
uint256, // nftId_
|
||||||
|
int256, // final supply amount if - then withdraw
|
||||||
|
int256 // final borrow amount if - then payback
|
||||||
|
);
|
||||||
|
|
||||||
|
struct ConstantViews {
|
||||||
|
address liquidity;
|
||||||
|
address factory;
|
||||||
|
address adminImplementation;
|
||||||
|
address secondaryImplementation;
|
||||||
|
address supplyToken;
|
||||||
|
address borrowToken;
|
||||||
|
uint8 supplyDecimals;
|
||||||
|
uint8 borrowDecimals;
|
||||||
|
uint vaultId;
|
||||||
|
bytes32 liquidityTotalSupplySlot;
|
||||||
|
bytes32 liquidityTotalBorrowSlot;
|
||||||
|
bytes32 liquiditySupplyExchangePriceSlot;
|
||||||
|
bytes32 liquidityBorrowExchangePriceSlot;
|
||||||
|
bytes32 liquidityUserSupplySlot;
|
||||||
|
bytes32 liquidityUserBorrowSlot;
|
||||||
|
}
|
||||||
|
|
||||||
|
function constantsView() external view returns (ConstantViews memory constantsView_);
|
||||||
|
}
|
44
contracts/mainnet/connectors/fluid/main.sol
Normal file
44
contracts/mainnet/connectors/fluid/main.sol
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
//SPDX-License-Identifier: MIT
|
||||||
|
pragma solidity ^0.7.0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @title Fluid.
|
||||||
|
* @dev Lending & Borrowing.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Stores } from "../../common/stores.sol";
|
||||||
|
import { Events } from "./events.sol";
|
||||||
|
import { IVault } from "./interface.sol";
|
||||||
|
|
||||||
|
abstract contract FluidConnector is Events, Stores {
|
||||||
|
// todo: add logics when user wants to deposit weth
|
||||||
|
|
||||||
|
function operate(
|
||||||
|
address vaultAddress_,
|
||||||
|
uint256 nftId_, // if 0 then new position
|
||||||
|
int256 newCol_, // if negative then withdraw
|
||||||
|
int256 newDebt_, // if negative then payback
|
||||||
|
address to_,
|
||||||
|
uint256 getId_,
|
||||||
|
uint256 setId_
|
||||||
|
) external payable
|
||||||
|
returns (string memory _eventName, bytes memory _eventParam)
|
||||||
|
{
|
||||||
|
nftId_ = getUint(getId_, nftId_);
|
||||||
|
|
||||||
|
IVault vault_ = IVault(vaultAddress_);
|
||||||
|
|
||||||
|
IVault.ConstantViews memory vaultDetails_ = vault_.constantsView();
|
||||||
|
|
||||||
|
(nftId_, newCol_, newDebt_) = vault_.operate(nftId_, newCol_, newDebt_, to_);
|
||||||
|
|
||||||
|
setUint(setId_, nftId_);
|
||||||
|
|
||||||
|
_eventName = "LogOperate(address,uint256,uint256,uint256,address,uint256,uint256)";
|
||||||
|
_eventParam = abi.encode(vaultAddress_, nftId_, newCol_, newDebt_, to_, getId_, setId_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
contract ConnectV2Fluid is FluidConnector {
|
||||||
|
string public constant name = "Fluid-v1.0";
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user