UNPKG

@volare.finance/volare.js

Version:
86 lines (85 loc) 4.15 kB
/** * @file mirror.ts * @author astra <astra@volare.com> * @date 2022 */ import { Address, BigNumber, Hash, Sym } from '@volare.finance/utils.js'; import { INativeVault, INativeVToken } from './protocols'; export declare function getProductHash(vToken: Pick<INativeVToken, 'underlyingAsset' | 'strikeAsset' | 'collateralAsset' | 'isPut'>): Hash; /** * @notice convert an amount in asset A to equivalent amount of asset B, based on an expiry price * @dev function includes the amount and apply .mul() first to increase the accuracy * @param _amount amount in asset A * @param _assetA asset A * @param _assetB asset B * @param _expiry * @param _prices * @return _amount in asset B */ export declare function _convertAmountOnExpiryPrice(_amount: BigNumber, _assetA: Address, _assetB: Address, _expiry: number, _prices?: { [key: Address]: BigNumber; }): Promise<BigNumber>; /** * @description return the cash value of an expired vToken, denominated in strike asset * @param vToken * @param underlyingPrice denominated in usd * @param strikePrice denominated in usd * @return cash value of an expired vToken, denominated in the strike asset */ export declare function getExpiredCashValue(vToken: Pick<INativeVToken, 'strikePrice' | 'isPut'>, underlyingPrice: BigNumber, strikePrice: BigNumber): BigNumber; /** * @description return the cash value of an expired vToken, denominated in collateral * @param vToken * @param collateralPrice denominated in usd * @param underlyingPrice denominated in usd * @param strikePrice denominated in usd */ export declare function getExpiredPayoutRate(vToken: Pick<INativeVToken, 'strikePrice' | 'isPut'>, collateralPrice: BigNumber, underlyingPrice: BigNumber, strikePrice: BigNumber): BigNumber; /** * @description get an vToken's payout/cash value after expiry, in the collateral asset * @param vToken * @param collateralPrice denominated in usd * @param underlyingPrice denominated in usd * @param strikePrice denominated in usd * @param amount */ export declare function getPayout(vToken: Pick<INativeVToken, 'strikePrice' | 'isPut'>, collateralPrice: BigNumber, underlyingPrice: BigNumber, strikePrice: BigNumber, amount: BigNumber): BigNumber; /** * @notice get required collateral for naked margin position * if put: * a = min(strike price, spot shock * underlying price) * b = max(strike price - spot shock * underlying price, 0) * marginRequired = ( option upper bound value * a + b) * short amount * if call: * a = min(1, strike price / (underlying price / spot shock value)) * b = max(1- (strike price / (underlying price / spot shock value)), 0) * marginRequired = (option upper bound value * a + b) * short amount * @param vToken * @param shortAmount short amount in vault, in FixedPointInt type * @param underlyingPrice underlying price of short vToken underlying asset, in FixedPointInt type * @return required margin for this naked vault, in FixedPointInt type (scaled by 1e27) */ export declare function getNakedMarginRequired(vToken: Pick<INativeVToken, 'underlyingAsset' | 'strikeAsset' | 'collateralAsset' | 'isPut' | 'strikePrice' | 'expiry'>, shortAmount: BigNumber, underlyingPrice: BigNumber): BigNumber; export declare function getLiquidatablePrice(vToken: Pick<INativeVToken, 'underlyingAsset' | 'strikeAsset' | 'collateralAsset' | 'isPut' | 'strikePrice' | 'expiry'>, shortAmount: BigNumber, collateralAmount: BigNumber): BigNumber; /** * @description returns the amount of collateral that can be removed from an actual or a theoretical vault * @param vault * @param prices denominated in usd */ export declare function getMarginRequired(vault: INativeVault, prices: { [key: Sym]: BigNumber; }): Promise<{ shortPayouts: BigNumber[]; longPayouts: BigNumber[]; marginRequired: BigNumber[]; }>; export declare function getCollateralDetails(vault: INativeVault, prices: { [key: Sym]: BigNumber; }): Promise<{ collateralAssets: Address[]; collateralAmounts: BigNumber[]; fullCollateralAmounts: BigNumber[]; collateralRates: string[]; marginRequired: BigNumber[]; liquidationRates: string[]; }>;