UNPKG

@firefly-exchange/library-sui

Version:

Sui library housing helper methods, classes to interact with Bluefin protocol(s) deployed on Sui

692 lines (691 loc) 26.4 kB
import { DryRunTransactionBlockResponse, SuiClient, SuiObjectResponse, SuiTransactionBlockResponseOptions } from "@mysten/sui/client"; import { SuiTransactionBlockResponse } from "@mysten/sui/client"; import { SignatureWithBytes, Signer } from "@mysten/sui/cryptography"; import BigNumber from "bignumber.js"; import { BankAccountDetails, Operator, Order, PerpCreationMarketDetails, UserPosition, ZkPayload } from "../interfaces"; import { address, BigNumberable, OnChainCallResponse, TransactionBlock } from "../types"; import { TransactionObjectArgument } from "@mysten/sui/transactions"; import { TRANSFERABLE_COINS } from "../enums"; import { OnChainCalls as SpotOnChainCalls } from "../spot"; import { UserCalls as ProUserOnChainCalls } from "../v3"; export declare class OnChainCalls { signer: Signer; settlementCap: string | undefined; deployment: any; private suiClient; private is_zkLogin; private maxEpoch?; private proof?; private decodedJWT?; private salt?; private walletAddress?; private is_wallet_extension; private sequentialExecutors; constructor(_signer: Signer, _deployment: any, suiClient: SuiClient, isZkLogin?: boolean, zkPayload?: ZkPayload, walletAddress?: string, is_wallet_extension?: boolean, settlementCap?: string); setExchangeAdmin(args: { address: string; adminID?: string; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setExchangeGuardian(args: { address: string; adminID?: string; safeID?: string; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setFundingRateOperator(args: { operator: string; adminID?: string; safeID?: string; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setPreLaunchMarketStatus(args: { status: boolean; market: string; adminID?: string; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setPreLaunchOraclePriceOperator(args: { operator: string; adminID?: string; safeID?: string; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setPreLaunchMarketOraclePrice(args: { price: number; market?: string; safeID?: string; gasBudget?: number; coinObjectId?: string; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; createPerpetual(args: PerpCreationMarketDetails, signer?: Signer, gasBudget?: number): Promise<SuiTransactionBlockResponse>; setMinPrice(args: { adminID?: string; market?: string; minPrice: number; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setMaxPrice(args: { adminID?: string; market?: string; maxPrice: number; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setStepSize(args: { adminID?: string; market?: string; stepSize: number; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setTickSize(args: { adminID?: string; market?: string; tickSize: number; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setMTBLong(args: { adminID?: string; market?: string; mtbLong: number; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setMTBShort(args: { adminID?: string; market?: string; mtbShort: number; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setMaxQtyLimit(args: { adminID?: string; market?: string; maxQtyLimit: number; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setMaxQtyMarket(args: { adminID?: string; market?: string; maxQtyMarket: number; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setMinQty(args: { adminID?: string; market?: string; minQty: number; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setMaxAllowedOIOpen(args: { adminID?: string; market?: string; maxLimit: string[]; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setMaintenanceMarginRequired(args: { adminID?: string; market?: string; mmr: string; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setInitialMarginRequired(args: { adminID?: string; market?: string; imr: string; }, options?: { gasBudget?: number; signer?: Signer; multiSig?: address; }): Promise<SuiTransactionBlockResponse | string>; createSettlementOperator(args: { operator: string; adminID?: string; safeID?: string; gasBudget?: number; }, options?: { gasBudget?: number; signer?: Signer; multiSig?: address; }): Promise<string | SuiTransactionBlockResponse>; removeSettlementOperator(args: { capID: string; adminID?: string; safeID?: string; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setFeePoolAddress(args: { adminID?: string; market?: string; address: string; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setInsurancePoolAddress(args: { adminID?: string; market?: string; address: string; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setInsurancePoolPercentage(args: { adminID?: string; market?: string; percentage: number; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setMaxAllowedFundingRate(args: { adminID?: string; market?: string; maxFundingRate: number; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; trade(args: { makerOrder: Order; makerSignature: string; makerPublicKey: string; takerOrder: Order; takerSignature: string; takerPublicKey: string; settlementCapID?: string; fillPrice?: BigNumber; fillQuantity?: BigNumber; perpID?: string; safeID?: string; bankID?: string; subAccountsMapID?: string; gasBudget?: number; market?: string; txHash?: string; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; batchTrade(args: { makerOrder: Order; makerSignature: string; makerPublicKey: string; takerOrder: Order; takerSignature: string; takerPublicKey: string; settlementCapID?: string; fillPrice?: BigNumber; fillQuantity?: BigNumber; perpID?: string; safeID?: string; bankID?: string; subAccountsMapID?: string; market?: string; txHash?: string; }[], options?: { gasBudget?: number; signer?: Signer; transactionBlock?: TransactionBlock; }): Promise<SuiTransactionBlockResponse>; batchTradeUsingExecutors(args: { makerOrder: Order; makerSignature: string; makerPublicKey: string; takerOrder: Order; takerSignature: string; takerPublicKey: string; settlementCapID?: string; fillPrice?: BigNumber; fillQuantity?: BigNumber; perpID?: string; safeID?: string; bankID?: string; subAccountsMapID?: string; market?: string; txHash?: string; }[], options?: { gasBudget?: number; transactionBlock?: TransactionBlock; }): Promise<SuiTransactionBlockResponse>; buildBatchTradeTxBlock(args: { makerOrder: Order; makerSignature: string; makerPublicKey: string; takerOrder: Order; takerSignature: string; takerPublicKey: string; settlementCapID?: string; fillPrice?: BigNumber; fillQuantity?: BigNumber; perpID?: string; safeID?: string; bankID?: string; subAccountsMapID?: string; market?: string; txHash?: string; }[], gasBudget?: number): Promise<TransactionBlock>; liquidate(args: { perpID?: string; liquidatee: string; quantity: string; leverage: string; liquidator?: string; allOrNothing?: boolean; subAccountsMapID?: string; gasBudget?: number; market?: string; txHash?: string; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; getBatchLiquidationTransactionBlock(args: { perpID?: string; liquidatee: string; quantity: string; leverage: string; liquidator?: string; allOrNothing?: boolean; subAccountsMapID?: string; gasBudget?: number; market?: string; txHash?: string; }[], gasBudget?: number, signer?: Signer): Promise<TransactionBlock>; batchLiquidate(args: { perpID?: string; liquidatee: string; quantity: string; leverage: string; liquidator?: string; allOrNothing?: boolean; subAccountsMapID?: string; gasBudget?: number; market?: string; }[], gasBudget?: number, signer?: Signer): Promise<SuiTransactionBlockResponse>; dryRun(txBlock: TransactionBlock, signer: Signer): Promise<DryRunTransactionBlockResponse>; deleverage(args: { maker: string; taker: string; quantity: string; allOrNothing?: boolean; perpID?: string; deleveragingCapID?: string; safeID?: string; gasBudget?: number; market?: string; txHash?: string; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; getBatchDeleveragingTransactionBlock(args: { maker: string; taker: string; quantity: string; allOrNothing?: boolean; perpID?: string; deleveragingCapID?: string; safeID?: string; gasBudget?: number; market?: string; txHash?: string; }[], gasBudget?: number, signer?: Signer): Promise<TransactionBlock>; batchDeleverage(args: { maker: string; taker: string; quantity: string; allOrNothing?: boolean; perpID?: string; deleveragingCapID?: string; safeID?: string; gasBudget?: number; market?: string; txHash?: string; }[], gasBudget?: number, signer?: Signer): Promise<SuiTransactionBlockResponse>; addMargin(args: { amount: number; account?: string; perpID?: string; subAccountsMapID?: string; market?: string; gasBudget?: number; txHash?: string; sponsor?: boolean; }, signer?: Signer): Promise<SuiTransactionBlockResponse | TransactionBlock>; removeMargin(args: { amount: number; account?: string; perpID?: string; subAccountsMapID?: string; market?: string; gasBudget?: number; txHash?: string; sponsor?: boolean; }, signer?: Signer): Promise<SuiTransactionBlockResponse | TransactionBlock>; adjustLeverage(args: { leverage: number; account?: string; perpID?: string; subAccountsMapID?: string; market?: string; gasBudget?: number; txHash?: string; sponsor?: boolean; }, signer?: Signer): Promise<TransactionBlock | SuiTransactionBlockResponse>; signAdjustLeverage(args: { leverage: number; account?: string; perpID?: string; subAccountsMapID?: string; market?: string; gasBudget?: number; txHash?: string; }, signer?: Signer): Promise<SignatureWithBytes>; /** * Create signed transaction for whitelisting/removing of the subaccounts on-chain */ signUpsertSubAccount(args: { account?: string; accountsToRemove?: Array<string>; subAccountsMapID?: string; gasBudget?: number; sponsor?: boolean; }, signer?: Signer): Promise<SignatureWithBytes | TransactionBlock>; cancelOrder(args: { order: Order; signature: string; publicKey: string; subAccountsMapID?: string; gasBudget?: number; txHash?: string; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setFundingRate(args: { rate: BigNumber; safeID?: string; updateFRCapID?: string; perpID?: string; market?: string; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setDeleveragingOperator(args: { operator: string; adminID?: string; safeID?: string; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setSubAccount(args: { account: string; status: boolean; subAccountsMapID?: string; gasBudget?: number; sponsor?: boolean; }, signer?: Signer): Promise<SuiTransactionBlockResponse | TransactionBlock>; depositToBank(args: { coinID: string; amount: string; txHash?: string; accountAddress?: string; bankID?: string; gasBudget?: number; sponsor?: boolean; }, signer?: Signer): Promise<SuiTransactionBlockResponse | TransactionBlock>; setBankWithdrawalStatus(args: { isAllowed: boolean; bankID?: string; safeID?: string; guardianCap?: string; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setPerpetualTradingPermit(args: { isPermitted: boolean; market?: string; safeID?: string; guardianCap?: string; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; withdrawFromBank(args: { amount: string; accountAddress?: string; txHash?: string; bankID?: string; gasBudget?: number; sponsor?: boolean; }, signer?: Signer): Promise<SuiTransactionBlockResponse | TransactionBlock>; withdrawAllMarginFromBank(signer?: Signer, walletAddress?: string, gasBudget?: number, bankID?: string, txHash?: string): Promise<SuiTransactionBlockResponse>; attachWithdrawCall(tx: TransactionBlock, userAddress: string): { balanceT: { $kind: "NestedResult"; NestedResult: [number, number]; }; amount: { $kind: "NestedResult"; NestedResult: [number, number]; }; }; attachWithdrawCallWithoutBalance(tx: TransactionBlock, userAddress: string): void; attachClosePositionCall(tx: TransactionBlock, symbol: string, userAddress: string): void; attachSwapCall(tx: TransactionBlock, inspectTx: TransactionBlock, userAddress: string, amountNumber: number, spotOnChain: SpotOnChainCalls, withdrawTxResult?: any, swapVia7k?: boolean, slippage?: number, defaultSlippage?: number, returnOnlyQuote?: boolean): Promise<any>; attachDepositToProCall(tx: TransactionBlock, userAddress: string, coinOut: TransactionObjectArgument, proUserOnChain: ProUserOnChainCalls): Promise<OnChainCallResponse>; closeAllPositionsAndWithdrawMarginPTB(delistedMarketPositions: string[], walletAddress?: string, args?: { gasBudget?: number; sponsor?: boolean; dryRunOnly?: boolean; }, signer?: Signer): Promise<TransactionBlock | SuiTransactionBlockResponse | DryRunTransactionBlockResponse>; swapAndDepositToProPTB(amount: number, spotOnChain: SpotOnChainCalls, proUserOnChain: ProUserOnChainCalls, walletAddress?: string, args?: { gasBudget?: number; sponsor?: boolean; use7k?: boolean; slippage?: number; defaultSlippage?: number; dryRunOnly?: boolean; }, signer?: Signer): Promise<TransactionBlock | SuiTransactionBlockResponse | DryRunTransactionBlockResponse>; withdrawAllSwapAndDepositToProPTB(spotOnChain: SpotOnChainCalls, proUserOnChain: ProUserOnChainCalls, walletAddress?: string, args?: { gasBudget?: number; sponsor?: boolean; use7k?: boolean; slippage?: number; dryRunOnly?: boolean; defaultSlippage?: number; }, signer?: Signer): Promise<TransactionBlock | SuiTransactionBlockResponse | DryRunTransactionBlockResponse>; closeAllPositionsWithdrawSwapAndDepositToProPTB(delistedMarketPositions: string[], spotOnChain: SpotOnChainCalls, proUserOnChain: ProUserOnChainCalls, walletAddress?: string, args?: { gasBudget?: number; sponsor?: boolean; use7k?: boolean; slippage?: number; dryRunOnly?: boolean; defaultSlippage?: number; }, signer?: Signer): Promise<TransactionBlock | SuiTransactionBlockResponse | DryRunTransactionBlockResponse>; inspectWithdrawAllAndGetEstimatedSwapAmount(delistedMarketPositions: string[], spotOnChain: SpotOnChainCalls, walletAddress?: string, args?: { gasBudget?: number; slippage?: number; dryRunOnly?: boolean; defaultSlippage?: number; }, signer?: Signer): Promise<any>; delistPerpetual(args: { price: string; market?: string; adminID?: string; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; closePosition(args?: { bankID?: string; perpID?: string; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; removeEmptyPositions(args: { market: string; users: string[]; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; /** * @notice Allows admin to update the default maker fee of a perpetual * @param args: * market: name of the perpetual/market * fee: the maker fee to be charged from user on each tx NOTE: should be in bps 1.5/2.5 */ setMakerFee(args: { market: string; fee: number; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; /** * @notice Allows admin to update the default taker fee of a perpetual * @param args: * market: name of the perpetual/market * fee: the taker fee to be charged from user on each tx NOTE: should be in bps 1.5/2.5 */ setTakerFee(args: { market: string; fee: number; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; setSpecialFee(args: { adminID?: string; marketName?: string; account: string; status: boolean; makerFee: number; takerFee: number; gasBudget?: number; }, options?: { gasBudget?: number; signer?: Signer; multiSig?: address; }): Promise<SuiTransactionBlockResponse | string>; executeTxBlock(transactionBlock: TransactionBlock, signer?: Signer, options?: SuiTransactionBlockResponseOptions): Promise<SuiTransactionBlockResponse>; executeTxBlockWithLocalExecution(transactionBlock: TransactionBlock, signer?: Signer, options?: SuiTransactionBlockResponseOptions): Promise<SuiTransactionBlockResponse>; /** * Executes provided signed transaction block * @param blockBytes bytes of the tx block * @param signature signature of the block * @returns */ executeSignedTxBlock(blockBytes: string | Uint8Array, signature: string, options?: SuiTransactionBlockResponseOptions): Promise<SuiTransactionBlockResponse>; createOracleObjects(signer?: Signer): Promise<SuiTransactionBlockResponse>; createBank(usdcAddress: string, gasBudget?: number, signer?: Signer): Promise<SuiTransactionBlockResponse>; createSequencer(signer?: Signer): Promise<SuiTransactionBlockResponse>; setOraclePrice(args: { price: number; confidence?: string; market?: string; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; /** * Returns price of oracle * @param market name of the market for which oracle price is to be fetched * @returns oracle price in base number */ getOraclePrice(market?: string): Promise<number>; mintUSDC(args?: { amount?: string; to?: string; treasuryCapID?: string; gasBudget?: number; }, signer?: Signer): Promise<SuiTransactionBlockResponse>; getUSDCCoins(args?: { address?: string; currencyType?: string; limit?: number; cursor?: string; }, signer?: Signer): Promise<any>; /** * Merges All USDC Coins to single coin * @param coinType [optional] coinType of USDC coin , if not provided will get from deployment json * @param signer the signer object of the wallet that owns USDC coins * @returns transaction result */ mergeAllUsdcCoins(coinType?: string, signer?: Signer | any, address?: string, sponsor?: boolean): Promise<TransactionBlock | SuiTransactionBlockResponse>; Z: any; /** * Prepare trasaction block for transferring SUI * @param to recipient wallet address * @param balance amount to transfer * @returns transaction block */ prepareTransactionForSUITransfer(to: string, balance: number, signer?: Signer | any): Promise<TransactionBlock>; transferCoinObjects(to: string, balance: number, coinObject: { balance: string; coinObjectIds: string[]; coinType: string; decimals: number; }, signer?: Signer | any, dryRun?: boolean): Promise<SuiTransactionBlockResponse | DryRunTransactionBlockResponse>; /** * Transfers Sui Balance to given wallet address * @param args.to destination wallet address * @param args.balance sui balance in normal base to transfer to destination wallet address * @param signer the signer object of the wallet that owns sui to transfer * @returns transaction Result */ transferSuiBalance(args: { to: string; balance: number; }, signer?: Signer | any): Promise<SuiTransactionBlockResponse>; getUSDCBalance(args?: { address?: string; currencyID?: string; limit?: number; cursor?: string; }, signer?: Signer): Promise<number>; getUSDCoinHavingBalance(args: { amount: BigNumberable; address?: string; currencyID?: string; limit?: number; cursor?: string; }, signer?: Signer): Promise<any>; private executeZkTransaction; private executeWalletTransaction; signAndCall(signer: Signer | any, method: string, callArgs: any[], moduleName: string, gasBudget?: number, packageId?: string, typeArguments?: string[]): Promise<SuiTransactionBlockResponse>; buildTxBlock(method: string, moduleName: string, callArgs: any[], signer: Signer | any, packageId?: string, typeArguments?: string[]): Promise<TransactionBlock>; setSettlementCap(id: string): void; /** * Get Sui Balance of given wallet address * @param user wallet address to get the sui balance of * @returns sui balance of user in base 9 */ getUserSuiBalance(user?: string): Promise<string>; getOnChainObject(id: string): Promise<SuiObjectResponse>; getOwnedObjects(objType: string, ownerAddr?: string): Promise<string[]>; getUserPosition(perpetual: string, user?: string): Promise<UserPosition>; getUserPositionFromID(id: string): Promise<UserPosition>; getPerpDetails(id: string): Promise<any>; getBankAccountDetailsUsingID(id: string): Promise<BankAccountDetails | undefined>; getUserBankBalance(user?: string, bankID?: string): Promise<BigNumber>; executeTransactionBlock(caller: Signer, tx: TransactionBlock): Promise<SuiTransactionBlockResponse>; private prepareTransactionBlock; estimateGasFee(txb: TransactionBlock): Promise<bigint>; estimateGasForSuiTransfer(args: { to: string; balance: number; }): Promise<bigint>; prepareTransactionForUSDCTransfer(to: string, balance: number): Promise<TransactionBlock>; transferUSDC(args: { to: string; balance: number; }, signer?: Signer | any): Promise<SuiTransactionBlockResponse>; /** * Transfers Sui Balance to given wallet address * @param args.to destination wallet address * @param args.balance sui balance in normal base to transfer to destination wallet address * @param signer the signer object of the wallet that owns sui to transfer * @param coin which coin to transfer * @returns transaction Result */ transferCoins(args: { to: string; balance: number; coin: TRANSFERABLE_COINS; }, signer?: Signer | any): Promise<SuiTransactionBlockResponse>; estimateGasForUSDCTransfer(args: { to: string; balance: number; }): Promise<bigint>; getPriceOracleObjectId(market?: string): string; getPriceOracleFeedId(market?: string): string; getPythPkgId(market?: string): string; getSettlementOperators(): Operator[]; getBankID(): string; getUpgradeCapID(): string; getSafeID(): string; getGuardianCap(): string; getFROperatorCapID(): string; getDeleveragingCapID(): string; getSettlementOperatorTable(): string; getPackageID(): string; getExchangeAdminCap(): string; getSubAccountsID(): string; getPriceOracleOperatorCap(): string; getPublicSettlementCap(): string; getPerpetualID(market?: string): string; getOrdersTableID(): string; getPositionsTableID(market?: string): string; getBankTableID(): string; getDeployerAddress(): string; getCurrencyID(): string; getCoinType(): string; getBankType(): string; getCurrencyType(): string; getTreasuryCapID(): string; getSequencer(): string; _parseAccountDetails(obj: any): BankAccountDetails; getZkPayload: () => ZkPayload; }