import { BigNumber } from 'ethers'; import { Decimal } from 'decimal.js'; export declare const ZERO_DEC: Decimal; export declare const ONE_DEC: Decimal; export declare const TWO_DEC: Decimal; export declare const SECONDS_PER_YEAR: number; /** ************************* Support functions *************************** */ /** * @param { BigNumber | string } multiplicant * @param { BigNumber | string } multiplier * @param { string } precisionDifference // Difference between multiplicant and multiplier precision (eg. wei vs ray '1e-27' ) * @returns { string } in decimal precision of the multiplicant */ export declare const mulDecimal: (multiplicant: BigNumber | string, multiplier: BigNumber | string, precisionDifference?: string) => string; /** * @param { BigNumber | string } numerator * @param { BigNumber | string } divisor * @param { BigNumber | string } precisionDifference // Difference between multiplicant and mulitplier precision (eg. wei vs ray '1e-27' ) * @returns { string } in decimal precision of the numerator */ export declare const divDecimal: (numerator: BigNumber | string, divisor: BigNumber | string, precisionDifference?: string) => string; /** * @param { BigNumber | string } value * @returns { string } */ export declare const floorDecimal: (value: BigNumber | string) => string; /** * @param { Decimal } value * @returns { BigNumber } */ export declare const toBn: (value: Decimal) => BigNumber; /** * @param { BigNumber | string } to unix time * @param { BigNumber | string } from unix time *optional* default: now * @returns { string } as number seconds 'from' -> 'to' */ export declare const secondsToFrom: (to: BigNumber | string, from?: BigNumber | string) => string; /** ************************* YieldSpace functions *************************** */ /** * @param { BigNumber | string } baseBalance * @param { BigNumber | string } fyTokenBalance * @param { BigNumber | string } totalSupply * @param { BigNumber | string } base * @returns {[BigNumber, BigNumber]} * * https://www.desmos.com/calculator/mllhtohxfx */ export declare function mint(baseBalance: BigNumber | string, fyTokenBalance: BigNumber | string, totalSupply: BigNumber | string, mainTokenIn: BigNumber | string): [BigNumber, BigNumber]; /** * @param { BigNumber | string } baseBalance * @param { BigNumber | string } fyTokenBalance * @param { BigNumber | string } totalSupply * @param lpTokens { BigNumber | string } * @returns {[BigNumber, BigNumber]} * * https://www.desmos.com/calculator/ubsalzunpo */ export declare function burn(baseBalance: BigNumber | string, fyTokenBalance: BigNumber | string, totalSupply: BigNumber | string, lpTokens: BigNumber | string): [BigNumber, BigNumber]; /** * @param { BigNumber | string } baseBalance * @param { BigNumber | string } fyTokenBalanceVirtual * @param { BigNumber | string } fyTokenBalanceReal * @param { BigNumber | string } totalSupply * @param { BigNumber | string } fyToken * @param { BigNumber | string } timeTillMaturity * @param { BigNumber | string } scaleFactor * @returns {[BigNumber, BigNumber]} */ export declare function mintWithBase(baseBalance: BigNumber | string, fyTokenBalanceVirtual: BigNumber | string, fyTokenBalanceReal: BigNumber | string, supply: BigNumber | string, fyToken: BigNumber | string, timeTillMaturity: BigNumber | string, scaleFactor: BigNumber | string): [BigNumber, BigNumber]; /** * @param { BigNumber | string } baseBalance * @param { BigNumber | string } fyTokenBalanceVirtual * @param { BigNumber | string } fyTokenBalanceReal * @param { BigNumber | string } totalSupply * @param { BigNumber | string } lpTokens * @param { BigNumber | string } timeTillMaturity * @param { BigNumber | string } scaleFactor * @returns { BigNumber } */ export declare function burnForBase(baseBalance: BigNumber, fyTokenBalanceVirtual: BigNumber, fyTokenBalanceReal: BigNumber, supply: BigNumber, lpTokens: BigNumber, timeTillMaturity: BigNumber, scaleFactor: BigNumber | string): BigNumber; /** * @param { BigNumber | string } baseBalance * @param { BigNumber | string } fyTokenBalance * @param { BigNumber | string } base * @param { BigNumber | string } timeTillMaturity * @param { BigNumber | string } scaleFactor * @param { boolean } withNoFee * @returns { BigNumber } */ export declare function sellBase(baseBalance: BigNumber | string, fyTokenBalance: BigNumber | string, base: BigNumber | string, timeTillMaturity: BigNumber | string, scaleFactor: BigNumber | string, withNoFee?: boolean): BigNumber; /** * @param { BigNumber | string } baseBalance * @param { BigNumber | string } fyTokenBalance * @param { BigNumber | string } fyToken * @param { BigNumber | string } timeTillMaturity * @param { BigNumber | string } scaleFactor * @param { boolean } withNoFee * @returns { BigNumber } */ export declare function sellFYToken(baseBalance: BigNumber | string, fyTokenBalance: BigNumber | string, fyToken: BigNumber | string, timeTillMaturity: BigNumber | string, scaleFactor: BigNumber | string, withNoFee?: boolean): BigNumber; /** * @param { BigNumber | string } baseBalance * @param { BigNumber | string } fyTokenBalance * @param { BigNumber | string } base * @param { BigNumber | string } timeTillMaturity * @param { BigNumber | string } scaleFactor * @param { boolean } withNoFee * @returns { BigNumber } */ export declare function buyBase(baseBalance: BigNumber | string, fyTokenBalance: BigNumber | string, base: BigNumber | string, timeTillMaturity: BigNumber | string, scaleFactor: BigNumber | string, withNoFee?: boolean): BigNumber; /** * @param { BigNumber | string } baseBalance * @param { BigNumber | string } fyTokenBalance * @param { BigNumber | string } fyToken * @param { BigNumber | string } timeTillMaturity * @param { BigNumber | string } scaleFactor * @param { boolean } withNoFee * @returns { BigNumber } */ export declare function buyFYToken(baseBalance: BigNumber | string, fyTokenBalance: BigNumber | string, fyToken: BigNumber | string, timeTillMaturity: BigNumber | string, scaleFactor: BigNumber | string, withNoFee?: boolean): BigNumber; /** * @param { BigNumber | string } baseBalance * @param { BigNumber | string } fyTokenBalance * @param { BigNumber | string } fyToken * @param { BigNumber | string } timeTillMaturity * @param { BigNumber | string } scaleFactor * @returns { BigNumber } */ export declare function getFee(baseBalance: BigNumber | string, fyTokenBalance: BigNumber | string, fyToken: BigNumber | string, timeTillMaturity: BigNumber | string, scaleFactor: BigNumber | string): BigNumber; export declare function fyDaiForMint(baseBalance: BigNumber | string, fyDaiRealBalance: BigNumber | string, fyDaiVirtualBalance: BigNumber | string, base: BigNumber | string, timeTillMaturity: BigNumber | string): string; /** * Split a certain amount of X liquidity into its two componetnts (eg. base and fyToken) * @param { BigNumber } xBalance // eg. base balance * @param { BigNumber } yBalance // eg. fyToken balance * @param {BigNumber} xAmount // amount to split in wei * @returns [ BigNumber, BigNumber ] returns an array of [base, fyToken] */ export declare const splitLiquidity: (xBalance: BigNumber | string, yBalance: BigNumber | string, xAmount: BigNumber | string) => [string, string]; /** * Calculate Slippage * @param { BigNumber } value * @param { BigNumber } slippage optional: defaults to 0.005 (0.5%) * @param { number } minimise optional: whether the resutl should be a minimum or maximum (default max) * @returns { string } human readable string */ export declare const calculateSlippage: (value: BigNumber | string, slippage?: BigNumber | string, minimise?: boolean) => string; /** * Calculate Annualised Yield Rate * @param { BigNumber | string } rate // current [base] price per unit y[base] * @param { BigNumber | string } amount // y[base] amount at maturity * @param { number } maturity // date of maturity * @param { number } fromDate // ***optional*** start date - defaults to now() * @returns { string | undefined } human readable string */ export declare const calculateAPR: (tradeValue: BigNumber | string, amount: BigNumber | string, maturity: number, fromDate?: number) => string | undefined; /** * Calculates the collateralization ratio * based on the collat amount and value and debt value. * @param { BigNumber | string } collateralAmount amount of collateral ( in wei) * @param { BigNumber | string } collateralPrice price of collateral (in USD) * @param { BigNumber | string } debtValue value of base debt (in USD) * @param {boolean} asPercent OPTIONAL: flag to return ratio as a percentage * @returns { string | undefined } */ export declare const collateralizationRatio: (collateralAmount: BigNumber | string, collateralPrice: BigNumber | string, debtValue: BigNumber | string, asPercent?: boolean) => string | undefined; /** * Calcualtes the amount (base, or other variant) that can be borrowed based on * an amount of collateral (ETH, or other), and collateral price. * * @param {BigNumber | string} collateralAmount amount of collateral * @param {BigNumber | string} collateralPrice price of unit collateral (in currency x) * @param {BigNumber | string} debtValue value of debt (in currency x) * @param {BigNumber | string} liquidationRatio OPTIONAL: 1.5 (150%) as default * * @returns {string} */ export declare const borrowingPower: (collateralAmount: BigNumber | string, collateralPrice: BigNumber | string, debtValue: BigNumber | string, liquidationRatio?: string) => string;