@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
TypeScript
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;
}