mirror of
https://github.com/Instadapp/dsa-connectors.git
synced 2024-07-29 22:37:00 +00:00
b7d60ca8ae
* Adding staking * Adding tests * Formatting * Reformat events * Addressing PR comments
161 lines
4.8 KiB
Solidity
161 lines
4.8 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.7.6;
|
|
pragma abicoder v2;
|
|
|
|
import { TokenInterface } from "../../common/interfaces.sol";
|
|
|
|
/// @notice Different types of internal tokens
|
|
/// - UnderlyingToken: underlying asset for a cToken (except for Ether)
|
|
/// - cToken: Compound interest bearing token
|
|
/// - cETH: Special handling for cETH tokens
|
|
/// - Ether: the one and only
|
|
/// - NonMintable: tokens that do not have an underlying (therefore not cTokens)
|
|
enum TokenType {
|
|
UnderlyingToken,
|
|
cToken,
|
|
cETH,
|
|
Ether,
|
|
NonMintable
|
|
}
|
|
|
|
/// @notice Specifies different deposit actions that can occur during BalanceAction or BalanceActionWithTrades
|
|
enum DepositActionType {
|
|
// No deposit action
|
|
None,
|
|
// Deposit asset cash, depositActionAmount is specified in asset cash external precision
|
|
DepositAsset,
|
|
// Deposit underlying tokens that are mintable to asset cash, depositActionAmount is specified in underlying token
|
|
// external precision
|
|
DepositUnderlying,
|
|
// Deposits specified asset cash external precision amount into an nToken and mints the corresponding amount of
|
|
// nTokens into the account
|
|
DepositAssetAndMintNToken,
|
|
// Deposits specified underlying in external precision, mints asset cash, and uses that asset cash to mint nTokens
|
|
DepositUnderlyingAndMintNToken,
|
|
// Redeems an nToken balance to asset cash. depositActionAmount is specified in nToken precision. Considered a deposit action
|
|
// because it deposits asset cash into an account. If there are fCash residuals that cannot be sold off, will revert.
|
|
RedeemNToken,
|
|
// Converts specified amount of asset cash balance already in Notional to nTokens. depositActionAmount is specified in
|
|
// Notional internal 8 decimal precision.
|
|
ConvertCashToNToken
|
|
}
|
|
|
|
/// @notice Defines a balance action with a set of trades to do as well
|
|
struct BalanceActionWithTrades {
|
|
DepositActionType actionType;
|
|
uint16 currencyId;
|
|
uint256 depositActionAmount;
|
|
uint256 withdrawAmountInternalPrecision;
|
|
bool withdrawEntireCashBalance;
|
|
bool redeemToUnderlying;
|
|
// Array of tightly packed 32 byte objects that represent trades. See TradeActionType documentation
|
|
bytes32[] trades;
|
|
}
|
|
|
|
/// @notice Defines a balance action for batchAction
|
|
struct BalanceAction {
|
|
// Deposit action to take (if any)
|
|
DepositActionType actionType;
|
|
uint16 currencyId;
|
|
// Deposit action amount must correspond to the depositActionType, see documentation above.
|
|
uint256 depositActionAmount;
|
|
// Withdraw an amount of asset cash specified in Notional internal 8 decimal precision
|
|
uint256 withdrawAmountInternalPrecision;
|
|
// If set to true, will withdraw entire cash balance. Useful if there may be an unknown amount of asset cash
|
|
// residual left from trading.
|
|
bool withdrawEntireCashBalance;
|
|
// If set to true, will redeem asset cash to the underlying token on withdraw.
|
|
bool redeemToUnderlying;
|
|
}
|
|
|
|
struct Token {
|
|
// Address of the token
|
|
address tokenAddress;
|
|
// True if the token has a transfer fee which is used internally to determine
|
|
// the proper balance change
|
|
bool hasTransferFee;
|
|
// Decimal precision of the token as a power of 10
|
|
int256 decimals;
|
|
// Type of token, enumerated above
|
|
TokenType tokenType;
|
|
// Used internally for tokens that have a collateral cap, zero if there is no cap
|
|
uint256 maxCollateralBalance;
|
|
}
|
|
|
|
interface NotionalInterface {
|
|
function getCurrency(uint16 currencyId)
|
|
external
|
|
view
|
|
returns (Token memory assetToken, Token memory underlyingToken);
|
|
|
|
function getAccountBalance(uint16 currencyId, address account)
|
|
external
|
|
view
|
|
returns (
|
|
int256 cashBalance,
|
|
int256 nTokenBalance,
|
|
uint256 lastClaimTime
|
|
);
|
|
|
|
function depositUnderlyingToken(
|
|
address account,
|
|
uint16 currencyId,
|
|
uint256 amountExternalPrecision
|
|
) external payable returns (uint256);
|
|
|
|
function depositAssetToken(
|
|
address account,
|
|
uint16 currencyId,
|
|
uint256 amountExternalPrecision
|
|
) external returns (uint256);
|
|
|
|
function withdraw(
|
|
uint16 currencyId,
|
|
uint88 amountInternalPrecision,
|
|
bool redeemToUnderlying
|
|
) external returns (uint256);
|
|
|
|
function nTokenClaimIncentives() external returns (uint256);
|
|
|
|
function nTokenRedeem(
|
|
address redeemer,
|
|
uint16 currencyId,
|
|
uint96 tokensToRedeem_,
|
|
bool sellTokenAssets,
|
|
bool acceptResidualAssets
|
|
) external returns (int256);
|
|
|
|
function batchBalanceAction(
|
|
address account,
|
|
BalanceAction[] calldata actions
|
|
) external payable;
|
|
|
|
function batchBalanceAndTradeAction(
|
|
address account,
|
|
BalanceActionWithTrades[] calldata actions
|
|
) external payable;
|
|
}
|
|
|
|
interface StakingInterface is TokenInterface {
|
|
function mintFromETH(uint256 noteAmount, uint256 minBPT) external payable;
|
|
|
|
function mintFromWETH(
|
|
uint256 noteAmount,
|
|
uint256 wethAmount,
|
|
uint256 minBPT
|
|
) external;
|
|
|
|
function mintFromBPT(uint256 bptAmount) external;
|
|
|
|
function startCoolDown() external;
|
|
|
|
function stopCoolDown() external;
|
|
|
|
function redeem(
|
|
uint256 sNOTEAmount,
|
|
uint256 minWETH,
|
|
uint256 minNOTE,
|
|
bool redeemWETH
|
|
) external;
|
|
}
|