@tracer-protocol/pools-js
Version:
Javascript library for interacting with Tracer's Perpetual Pools
183 lines (182 loc) • 6.34 kB
TypeScript
import BigNumber from "bignumber.js";
import { ethers } from "ethers";
import { NETWORKS } from '../utils';
import { PoolCommitter, PoolKeeper } from "@tracer-protocol/perpetual-pools-contracts/types";
import { EVENT_NAMES } from "../utils";
import { Pool } from "../entities";
/**
* Holds burn and mint pending amounts
* PendingAmounts.mint is the amount of quote token pending in the shadow pools
* PendingAmounts.burn is the amount of to be burned pool tokens in the shadow pools
*/
export declare type PendingAmounts = {
mint: BigNumber;
burn: BigNumber;
};
/**
* Global contract interface used by each of the {@link entities}
*/
export interface IContract {
address: string;
provider: ethers.providers.Provider | ethers.Signer;
}
/**
* ERC20 token info which is static and not going to change
*/
export declare type StaticTokenInfo = {
address: string;
name: string;
symbol: string;
decimals: number;
};
declare type KnownNetworkKeys = keyof typeof NETWORKS;
export declare type KnownNetwork = typeof NETWORKS[KnownNetworkKeys];
export declare type TotalPoolCommitments = Awaited<ReturnType<PoolCommitter['totalPoolCommitments']>>;
export declare type TotalPoolCommitmentsBN = {
longMintSettlement: BigNumber;
longBurnPoolTokens: BigNumber;
shortMintSettlement: BigNumber;
shortBurnPoolTokens: BigNumber;
shortBurnLongMintPoolTokens: BigNumber;
longBurnShortMintPoolTokens: BigNumber;
};
export declare type OraclePriceTransformer = (lastPrice: BigNumber, currentPrice: BigNumber) => BigNumber;
export declare type PoolStatePreviewInputs = {
leverage: BigNumber;
fee: BigNumber;
longBalance: BigNumber;
shortBalance: BigNumber;
longTokenSupply: BigNumber;
shortTokenSupply: BigNumber;
pendingLongTokenBurn: BigNumber;
pendingShortTokenBurn: BigNumber;
lastOraclePrice: BigNumber;
currentOraclePrice: BigNumber;
pendingCommits: TotalPoolCommitmentsBN[];
oraclePriceTransformer: OraclePriceTransformer;
};
export declare type PoolStatePreview = {
timestamp: number;
currentSkew: BigNumber;
currentLongBalance: BigNumber;
currentLongSupply: BigNumber;
currentShortBalance: BigNumber;
currentShortSupply: BigNumber;
currentLongTokenPrice: BigNumber;
currentShortTokenPrice: BigNumber;
currentPendingLongTokenBurn: BigNumber;
currentPendingShortTokenBurn: BigNumber;
expectedSkew: BigNumber;
expectedLongBalance: BigNumber;
expectedLongSupply: BigNumber;
expectedShortBalance: BigNumber;
expectedShortSupply: BigNumber;
totalNetPendingLong: BigNumber;
totalNetPendingShort: BigNumber;
expectedLongTokenPrice: BigNumber;
expectedShortTokenPrice: BigNumber;
expectedPendingLongTokenBurn: BigNumber;
expectedPendingShortTokenBurn: BigNumber;
lastOraclePrice: BigNumber;
expectedOraclePrice: BigNumber;
pendingCommits: TotalPoolCommitmentsBN[];
};
export interface OracleClass<C> {
_contract?: C;
address: string;
provider: ethers.providers.Provider | ethers.Signer | undefined;
getPrice: () => Promise<BigNumber>;
}
export declare type RawCommitType = 0 | 1 | 2 | 3 | 4 | 5;
export declare type CommitEventData = {
user: string;
amount: BigNumber;
commitType: RawCommitType;
appropriateIntervalId: number;
payForClaim: boolean;
fromAggregateBalance: boolean;
mintingFee: string;
timestamp: number;
blockNumber: number;
txHash: string;
settlementTokenDecimals: number;
};
export declare type UpkeepEventData = {
poolAddress: string;
data: string;
startPrice: BigNumber;
endPrice: BigNumber;
timestamp: number;
blockNumber: number;
txHash: string;
};
export declare type CommitsExecutedData = {
updateIntervalId: number;
burningFee: string;
timestamp: number;
blockNumber: number;
txHash: string;
};
export declare type SpecificPool = {
poolAddress: string;
};
declare type PoolWatcherArgs = {
nodeUrl: string;
chainId: string;
commitmentWindowBuffer: number;
oraclePriceTransformer?: (lastPrice: BigNumber, currentPrice: BigNumber) => BigNumber;
ignoreEvents?: {
[eventName: string]: boolean;
};
};
export declare type PoolWatcherConstructorArgs = SpecificPool & PoolWatcherArgs;
export declare type MultiplePoolWatcherConstructorArgs = {
poolAddresses: string[];
} & PoolWatcherArgs;
export declare type WatchedPool = {
address: string;
sdkInstance: Pool;
updateInterval: number;
keeperInstance: PoolKeeper;
lastPriceTimestamp: number;
committerInstance: PoolCommitter;
frontRunningInterval: number;
};
export declare type ExpectedPoolState = {
timestamp: number;
currentSkew: BigNumber;
currentLongBalance: BigNumber;
currentLongSupply: BigNumber;
currentShortBalance: BigNumber;
currentShortSupply: BigNumber;
expectedSkew: BigNumber;
expectedLongBalance: BigNumber;
expectedLongSupply: BigNumber;
expectedShortBalance: BigNumber;
expectedShortSupply: BigNumber;
totalNetPendingLong: BigNumber;
totalNetPendingShort: BigNumber;
expectedLongTokenPrice: BigNumber;
expectedShortTokenPrice: BigNumber;
lastOraclePrice: BigNumber;
expectedOraclePrice: BigNumber;
pendingCommits: TotalPoolCommitmentsBN[];
};
export declare type ExpectedPoolStateWithUpdateIntervalId = ExpectedPoolState & {
updateIntervalId: BigNumber;
};
export interface PoolWatcherEvents {
[EVENT_NAMES.COMMIT]: (data: CommitEventData) => void;
[EVENT_NAMES.UPKEEP]: (data: UpkeepEventData) => void;
[EVENT_NAMES.COMMITMENT_WINDOW_ENDED]: () => void;
[EVENT_NAMES.COMMITMENT_WINDOW_ENDING]: (state: ExpectedPoolStateWithUpdateIntervalId) => void;
[EVENT_NAMES.COMMITS_EXECUTED]: (data: CommitsExecutedData) => void;
}
export interface MultiplePoolWatcherEvents {
[EVENT_NAMES.COMMIT]: (data: CommitEventData & SpecificPool) => void;
[EVENT_NAMES.UPKEEP]: (data: UpkeepEventData & SpecificPool) => void;
[EVENT_NAMES.COMMITMENT_WINDOW_ENDED]: (data: SpecificPool) => void;
[EVENT_NAMES.COMMITMENT_WINDOW_ENDING]: (state: ExpectedPoolStateWithUpdateIntervalId & SpecificPool) => void;
[EVENT_NAMES.COMMITS_EXECUTED]: (data: CommitsExecutedData & SpecificPool) => void;
}
export {};