UNPKG

@volare.finance/volare.js

Version:
298 lines (297 loc) 6.64 kB
/** * @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; }