@volare.finance/volare.js
Version:
The SDK for Volare Protocol
298 lines (297 loc) • 6.64 kB
TypeScript
/**
* @file protocols.ts
* @author astra <astra@volare.finance>
* @date 2022
*/
import { Address, BigNumber, Hash, IERC20, Sym } from '@volare.finance/utils.js';
import { INativeOrder, INativeVault, INativeVToken, OrderStatus, StrategyType, VaultType } from '../volare';
export type ICash = IERC20;
export interface IProduct {
hash: Hash;
symbol: Sym;
underlying: IERC20;
strike: IERC20;
}
export interface IVToken {
product: Sym;
address: Address;
name: string;
symbol: Sym;
underlyingAsset: Address;
underlyingSymbol: Sym;
expiry: number;
features: Array<VaultType>;
}
export interface IVTokenDetails extends INativeVToken {
product: Sym;
name: string;
symbol: Sym;
underlyingSymbol: Sym;
strikeSymbol: Sym;
collateralSymbol: Sym;
features: Array<VaultType>;
}
export declare enum LongOrShortState {
NotExpired = 1,
Expired = 2,
Settled = 3,
Redeemed = 4,
NoCashValue = 99
}
export declare enum VaultState {
NotExpired = 1,
Expired = 2,
Settled = 3,
NoCashValue = 99
}
/**
* @field this kind of long doesn't exist in any vault
* @field owner is owner
* @field expiryPrice denominated in usd
* @field strikePrice denominated in strike asset
* @field amount denominated in vToken asset
* @field payout denominated in collateral asset
*/
export interface ILong {
state: LongOrShortState;
owner: Address;
vTokenAddress: Address;
vTokenSymbol: Sym;
isPut: boolean;
underlying: Address;
underlyingSymbol: Sym;
underlyingDecimals: number;
strike: Address;
strikeSymbol: Sym;
strikeDecimals: number;
collateral: Address;
collateralSymbol: Sym;
collateralDecimals: number;
expiry: number;
expiryPrice: BigNumber;
strikePrice: BigNumber;
amount: BigNumber;
payout: BigNumber;
fee: BigNumber;
roe: number;
ctime: number;
mtime: number;
}
export interface IShort extends ILong {
vaultId: number;
index: number;
}
/**
* @field owner is owner
* @field expiryPrice denominated in usd
* @field payout denominated in collateral asset
*/
export interface IPnL {
timestamp: number;
owner: Address;
vTokenAddress: Address;
amount: BigNumber;
expiryPrice: BigNumber;
payout: BigNumber;
roe: number;
}
export type ILongPnL = IPnL;
export interface ICollateral {
timestamp: number;
owner: Address;
assets: Array<Address>;
symbols: Array<Sym>;
amounts: Array<BigNumber>;
value: BigNumber;
}
export interface IVault {
state: VaultState;
owner: Address;
vaultId: number;
vaultType: VaultType;
strategyType: StrategyType;
collateralAssets: Array<Address>;
collateralSymbols: Array<Sym>;
collateralAmounts: Array<number | undefined>;
payoutAmounts: Array<number | undefined>;
}
export interface IVaultDetails extends INativeVault {
state: VaultState;
owner: Address;
vaultId: number;
vaultType: VaultType;
strategyType: StrategyType;
underlyingSymbol: Sym;
shortSymbols: Array<Sym>;
longSymbols: Array<Sym>;
collateralSymbols: Array<Sym>;
shortPayouts: Array<BigNumber | undefined>;
longPayouts: Array<BigNumber | undefined>;
marginRequired: Array<BigNumber | undefined>;
payoutAmounts: Array<BigNumber | undefined>;
fee: BigNumber;
roe: number;
ctime: number;
mtime: number;
}
/**
* @field owner is owner
* @field payouts denominated in collateral asset
*/
export interface IVaultPnL {
timestamp: number;
owner: Address;
vaultId: number;
shortVTokens?: Address[];
shortAmounts?: BigNumber[];
shortExpiryPrices?: BigNumber[];
longVTokens?: Address[];
longAmounts?: BigNumber[];
longExpiryPrices?: BigNumber[];
collateralAssets?: Address[];
collateralAmounts?: BigNumber[];
marginRequired?: BigNumber[];
roe: number;
}
export interface IVaultCollateral {
owner: Address;
vaultId: number;
index: number;
asset: Address;
amount: BigNumber;
}
export interface IGreek {
iv: number;
delta: number;
}
export interface IPair {
product: Sym;
expiry: number;
asset: Sym;
cash: Sym;
liquidity?: {
volume: number;
ask1: number;
bid1: number;
};
greek?: {
ask1: IGreek;
bid1: IGreek;
};
position?: {
amount: BigNumber;
};
}
export type Orderbook = Array<{
price: number;
size: number;
width: number;
}>;
export type Trades = Array<{
timestamp: number;
price: number;
size: number;
}>;
export declare enum OrderSide {
Ask = 1,
Bid = 2
}
export declare enum OrderType {
All = 0,
Limit = 1,
Market = 2
}
export interface IOrder {
orderHash: Hash;
asset: Sym;
type: OrderType;
side: OrderSide;
price: number;
amount: number;
filled: number;
size: number;
fee: number;
expiry: number;
ctime: number;
mtime: number;
}
export interface IOrderDetails extends INativeOrder {
asset: Sym;
type: OrderType;
side: OrderSide;
fee: BigNumber;
price: BigNumber;
amount: BigNumber;
filled: BigNumber;
size: BigNumber;
expiry: number;
ctime: number;
mtime: number;
}
export interface IHistory {
orderHash: Hash;
asset: Sym;
type: OrderType;
side: OrderSide;
price: number;
amount: number;
filled: number;
fee: number;
expiry: number;
ctime: number;
mtime: number;
status: OrderStatus;
}
export interface ILog {
timestamp: number;
blockNumber: number;
transactionHash: Hash;
logIndex: number;
owner: Address;
vaultId: number;
action: string;
event: string;
asset: Sym;
assetChanged: number;
}
export declare enum NotificationType {
Order = 1
}
export declare enum NotificationContentState {
Ongoing = 0,
Settled = 1,
Error = 2
}
export declare enum NotificationState {
Ongoing = 0,
Settled = 1,
Error = 2
}
export declare enum NotificationOrderState {
Ordered = 0,
PartialFilled = 1,
Filled = 2,
Expired = 3,
Cancelled = 4,
Error = 5
}
export interface INotificationOrder {
orderHash: Hash;
asset: Sym;
side: OrderSide;
price: number;
amount: number;
filled?: number;
size?: number;
state?: NotificationOrderState;
}
export interface INotification {
id: string;
owner: Address;
isRead: boolean;
type: NotificationType;
state: NotificationState;
content: INotificationOrder;
ctime: number;
mtime: number;
}