@volare.finance/volare.js
Version:
The SDK for Volare Protocol
86 lines (85 loc) • 4.15 kB
TypeScript
/**
* @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[];
}>;