UNPKG

@ultrade/ultrade-js-sdk

Version:

Javascript SDK for interaction with the Ultrade AMM system

346 lines (345 loc) 10.1 kB
import algosdk from 'algosdk'; import { AssetList, IAssetAmt, PoolList, PoolState, TokenPair, StablePoolState } from './types'; export declare class PendingTxnResponse { poolError: string; txn: Record<string, any>; applicationIndex: number | undefined; assetIndex: number | undefined; closeRewards: number | undefined; closingAmount: number | undefined; confirmedRound: number | undefined; globalStateDelta: any; localStateDelta: any; receiverRewards: number | undefined; senderRewards: number | undefined; innerTxns: Array<any>; logs: any; constructor(response: Record<string, any>); } export declare class AmmClient { private client; private appId; private masterContract; private poolContract; private stableContract; private assetsCache; private poolsCache; /** * construct AmmClient * * @param appId master app id * @param cluster one of node */ constructor(appId: number, client: algosdk.Algodv2); getAssetCache(): AssetList; getPoolsCache(): PoolList; /** * get status of current node. * * @returns */ getStatus(): Promise<Record<string, any>>; /** * check if an asset is stable coin. * * @returns */ isStableAsset(asset: number): Promise<boolean>; /** * Returns the common needed parameters for a new transaction. * * @returns */ getTransactionParams(): Promise<import("algosdk/dist/types/types/transactions/base").SuggestedParamsWithMinFee>; /** * returns Algodv2 instance. * * @returns */ getAlgodClient(): algosdk.Algodv2; /** * create a pool for asset A and B. * * @param sender the sender of transaction * @param assetA * @param assetB * @returns */ createPair(sender: string, assetA: number, assetB: number, signer: algosdk.TransactionSigner): Promise<{ confirmedRound: number; txIDs: string[]; methodResults: algosdk.ABIResult[]; }>; /** * Add liquidity to A-B pool * * @param sender the sender of transaction * @param aId id of asset A to send the A-B pool * @param aAmt amount of asset A * @param bId id of asset B * @param bAmt amount of asset B to send the A-B pool * @param mintAmt * @returns */ addLiquidity(sender: string, aId: number, aAmt: number | bigint, bId: number, bAmt: number | bigint, mintAmt: number | bigint, signer: algosdk.TransactionSigner): Promise<{ confirmedRound: number; txIDs: string[]; methodResults: algosdk.ABIResult[]; }>; /** * remove liquidity from the pool * * @param sender the sender of transaction * @param poolId * @param poolTokenAmt * @param aMinAmt * @param bMinAmt * @returns */ removeLiquidity(sender: string, poolId: number, poolTokenAmt: number | bigint, aMinAmt: number | bigint, bMinAmt: number | bigint, signer: algosdk.TransactionSigner): Promise<{ confirmedRound: number; txIDs: string[]; methodResults: algosdk.ABIResult[]; }>; /** * swap tokens * * @param sender the sender of transaction * @param inId asset id of input * @param inAmt input amount * @param outId asset id of output * @returns */ swap(sender: string, inId: number, inAmt: number | bigint, outId: number, slippage: number, signer: algosdk.TransactionSigner): Promise<{ confirmedRound: number; txIDs: string[]; methodResults: algosdk.ABIResult[]; }>; /** * get LP token by asset A and B * * @param assetA * @param assetB * @returns */ getPoolToken(assetA: number, assetB: number): Promise<number>; /** * get pool app id by asset A and B * * @param assetA * @param assetB * @returns */ getPoolIdByAssets(assetA: number, assetB: number): Promise<number>; /** * get pool app id by LP token * @param tokenId * @returns */ getPoolByToken(tokenId: number): Promise<TokenPair>; /** * Get pool by asset A id and asset B id * @param assetA * @param assetB * @returns */ getPoolByAssets(assetA: number, assetB: number): Promise<TokenPair>; /** * get all pools * * @returns */ getPairs(): Promise<TokenPair[]>; /** * get balances of an address * * @param address * @returns */ getBalances(address: string): Promise<any>; /** * get balance of an address per asset * * @param assetId * @param address * @returns */ getBalance(assetId: number, address: string): Promise<number | bigint>; /** * check if an address opted in an asset * * @param assetId * @param addr * @returns */ isOptedInAsset(assetId: number, addr: string): Promise<boolean>; /** * get assets of addr * * @param addr * @returns */ getAssetList(addr: string): Promise<{ id: any; name: any; }[]>; /** * get output amount when a user swap A to B * * @param assetIn id of input asset * @param assetOut id of output asset * @param state pool state * @param amtIn input amount * @returns */ getSwapOutputByState(assetIn: number, assetOut: number, state: PoolState, amtIn: number | bigint): bigint; /** * get output amount after swap * * @param txId transaction id * @returns */ getAmountAfterSwap(txId: string): Promise<number>; /** * Get liquidity token amounts * * @param assetA id of asset A to send the A-B pool * @param assetAAmt amount of asset A * @param assetB id of asset B * @param assetBAmt amount of asset B to send the A-B pool * @returns int */ getMintAmt(assetA: number, assetAAmt: number | bigint, assetB: number, assetBAmt: number | bigint): Promise<bigint>; /** * Get liquidity token amounts by pool state * * @param state pool state * @param assetAAmt amount of asset A * @param assetBAmt amount of asset B to send the A-B pool * @returns int */ getMintAmtByState(state: PoolState, assetAAmt: number | bigint, assetBAmt: number | bigint): bigint; /** * Make opt-in for asset/pool * * @param sender the sender of transaction * @param assetId id of asset/pool * @param signer transaction signer * @returns */ prepareOptInTxn(sender: string, assetId: number, signer: algosdk.TransactionSigner): Promise<{ confirmedRound: number; txIDs: string[]; methodResults: algosdk.ABIResult[]; }>; /** * Get assets amounts after pool token burn * * @param assetA id of asset A * @param assetB id of asset B * @param burnAmt burn amount * @returns */ getAssetAmtAfterBurnLP(assetA: number, assetB: number, burnAmt: number): Promise<IAssetAmt>; /** * Get assets amounts after pool token burn by state * * @param state pool state * @param burnAmt burn amount * @returns */ getAssetAmtAfterBurnLPByState(state: PoolState, burnAmt: number): { assetA: bigint; assetB: bigint; }; /** * get input amount from output when a user swap A to B * * @param assetIn id of input asset * @param assetOut id of output asset * @param amtOut output amount * @returns */ getSwapInput(assetIn: number, assetOut: number, amtOut: number | bigint): Promise<bigint>; /** * get input amount from output when a user swap A to B * * @param assetIn id of input asset * @param assetOut id of output asset * @param amtOut output amount * @param state pool state * @returns */ getSwapInputByState(assetIn: number, assetOut: number, state: PoolState, amtOut: number | bigint): bigint; /** * get pool ratio * @param assetIn id of asset A * @param assetOut id of asset B * @returns */ getPoolRatio(assetIn: { index: number; decimals: number; }, assetOut: { index: number; decimals: number; }): Promise<number>; /** * get pool ratio * @param state pool state * @param aDecimals decimals of asset A * @param bDecimals decimals of asset B * @returns */ getPoolRatioByState(state: PoolState, aDecimals: number, bDecimals: number): number; /** * Get pool state * @param poolId id of pool * @returns */ getPoolState(poolId: number): Promise<PoolState | StablePoolState>; /** * Get all pool states * @returns */ getPoolStates(): Promise<{ [key: number]: PoolState; }>; /** * get price impact when a user swaps A to B * @param assetA id of asset A * @param assetB id of asset B * @param inAmt input amout * @returns */ getPriceImpact(assetA: number, assetB: number, inAmt: number): Promise<number>; /** * get price impact when a user swaps A to B by state * @param poolState pool state * @param assetA id of asset A * @param assetB id of asset B * @param inAmt input amout * @returns */ getPriceImpactByState(poolState: PoolState, inId: number, outId: number, inAmt: number): number; /** * get price impact and swap amount when a user swaps A to B * @param assetA id of asset A * @param assetB id of asset B * @param inAmt input amout * @returns */ getSwapResults(inId: number, outId: number, amount: number | bigint): Promise<{ swapOutput: bigint; swapInput: bigint; }>; getSwapResultsByState(inId: number, outId: number, state: PoolState, amount: number | bigint): { swapOutput: bigint; swapInput: bigint; }; private getTmpPoolId; private getTmpStablePoolId; private getAppState; private checkIsPoolExist; private getAsset; }