@tracer-protocol/pools-js
Version:
Javascript library for interacting with Tracer's Perpetual Pools
126 lines (125 loc) • 6.63 kB
TypeScript
import { BigNumber } from 'bignumber.js';
import { PoolStatePreview, PoolStatePreviewInputs } from '../types';
/**
* Calculates the effective multiplier returns for the longs. This amount varies depending on the skew between the long and short balances.
* Gain and loss refer to whether the pool is receiving tokens from the other pool or transferring tokens to the opposite pool.
* If there is more balance in the long pool than the short pools, you would expect the short pool to have
* `effectiveLongGain > leverage`.
* Both sides of the pool will always have an effectiveLoss lower limit at leverage, ie you can never have `effectiveLoss < leverage`.
* @param longBalance quote balance of the long pool in quote units (eg USD)
* @param shortBalance quote balance of the short pool in quote units (eg USD)
* @param leverage pool leverage
* @returns the effective winning returns to the long pool on next rebalance
*/
export declare const calcEffectiveLongGain: (shortBalance: BigNumber, longBalance: BigNumber, leverage: BigNumber) => BigNumber;
/**
* Calculates the effective gains multiplier for the shorts. This amount varies depending on the skew between the long and short balances.
* Gain and loss refer to whether the pool is receiving tokens from the other pool or transferring tokens to the opposite pool.
* If there is more balance in the long pool than the short pools, you would expect the short pool to have
* `effectiveLongGain > leverage`.
* The pools effective losses will always have a lower limit at leverage, ie you can never have `effectiveLoss < leverage`.
* @param longBalance quote balance of the long pool in USD
* @param shortBalance quote balance of the short pool in USD
* @param leverage pool leverage
* @returns the effective gains to the short pool on next rebalance
*/
export declare const calcEffectiveShortGain: (shortBalance: BigNumber, longBalance: BigNumber, leverage: BigNumber) => BigNumber;
/**
* Calculates the compounding gains
* @param apr annual percentage rate as a decimal
* eg 1 is a 100% apr
* @returns annual percentage yield coumpounded weekly
*/
export declare const calcAPY: (apr: BigNumber) => BigNumber;
/**
* Calculates the percentage the losing pool must transfer to the winning pool on next upKeep.
* JS implementation of https://github.com/tracer-protocol/perpetual-pools-contracts/blob/pools-v2/contracts/libraries/PoolSwapLibrary.sol#L348-L362
* @param oldPrice old market price
* @param newPrice new market price
* @param leverage pool leverage
* @returns the percentage the losing pool must transfer
* 2 / (1 + e^(-2 * leverage * (1 - (oldPrice / newPrice)))) - 1
*/
export declare const calcPercentageLossTransfer: (oldPrice: BigNumber, newPrice: BigNumber, leverage: BigNumber) => BigNumber;
/**
* Calculates the notional value of tokens
* @param tokenPrice current price of tokens
* @param numTokens number of tokens
* @returns notional value of the tokens
*/
export declare const calcNotionalValue: (tokenPrice: BigNumber, numTokens: BigNumber) => BigNumber;
/**
* Calculates the ratio of the old price to the new price
* @param oldPrice old market price
* @param newPrice new market price
*/
export declare const calcRatio: (oldPrice: BigNumber, newPrice: BigNumber) => BigNumber;
export declare const calcSkew: (shortBalance: BigNumber, longBalance: BigNumber) => BigNumber;
export declare const calcRebalanceRate: (shortBalance: BigNumber, longBalance: BigNumber) => BigNumber;
/**
* Calcualtes the direction of the price movement
* @param newPrice new market price
* @param oldPrice old market price
* @return DOWN (2) if oldPrice > newPrice, NO_CHANGE (3) if newPrice = oldPrice, or UP (1) if newPrice > oldPrice
*/
export declare const calcDirection: (oldPrice: BigNumber, newPrice: BigNumber) => BigNumber;
/**
* Calculate the pool tokens price
* Since totalQuoteValue will generally be in USD the returned amount
* will also be in USD
*/
export declare const calcTokenPrice: (totalQuoteValue: BigNumber, tokenSupply: BigNumber) => BigNumber;
/**
* Calculates how much value will be transferred between the pools
*
* @param oldPrice old market price
* @param newPrice new market price
* @param leverage pool leverage
* @param longBalance quote balance of the long pool in USD
* @param shortBalance quote balance of the short pool in USD
*
* returns an object containing longValueTransfer and shortValueTransfer
*/
export declare const calcNextValueTransfer: (oldPrice: BigNumber, newPrice: BigNumber, leverage: BigNumber, longBalance: BigNumber, shortBalance: BigNumber) => {
longValueTransfer: BigNumber;
shortValueTransfer: BigNumber;
};
/**
* Calculates the Balancer LP token price given a list of tokens included in the pool
* @param tokens list of tokens included in the balancer pool
* @returns 0 if no tokens are given, if the tokens have no USDC value or if the stakingToken supply is 0
* otherwise returns the price of the LP token.
*/
export declare const calcBptTokenPrice: (usdTokenSupply: BigNumber, tokens?: {
reserves: BigNumber;
usdPrice: BigNumber;
}[]) => BigNumber;
/**
* Calculates the trade price between two Balancer tokens.
* This price is dependent on the reserves deposited on each side
* within the Balancer pool, as well as the weighting of each.
* @param sellingToken weight and balance of token that is being sold
* @param buyingToken weight and balance of token that is being bought
* @param swapFee percentage swap fee in decimals
* @returns
*/
export declare const calcBptTokenSpotPrice: (sellingToken: {
weight: BigNumber;
balance: BigNumber;
}, buyingToken: {
weight: BigNumber;
balance: BigNumber;
}, swapFee: BigNumber) => BigNumber;
/**
* Calculate the expected execution given a commit timestamp, the frontRunningInterval, updateInterval and lastUpdate.
* This is just an estimate as there is a slight delay between possibleExecution and finalExecutionTimestamp
* See https://github.com/tracer-protocol/pools-js/blob/updated-calc/src/utils/calculations.ts#L280-L332
* for a long clearer sudo codish written version
*/
export declare const getExpectedExecutionTimestamp: (frontRunningInterval: number, updateInterval: number, lastUpdate: number, commitCreated: number) => number;
/**
* calculates the expected state of the pool after applying the given pending commits to the given pool state
* @param object containing current pool state
* @returns the expected state of the pool
*/
export declare const calcPoolStatePreview: (previewInputs: PoolStatePreviewInputs) => PoolStatePreview;