UNPKG

@triadxyz/triad-protocol

Version:

<div align="center"> <h1>Triad Protocol</h1> </div>

431 lines (430 loc) 16.1 kB
/// <reference types="@coral-xyz/anchor/node_modules/@solana/web3.js" /> import { Connection, PublicKey, TransactionInstruction } from '@solana/web3.js'; import { AnchorProvider, Program, Wallet } from '@coral-xyz/anchor'; import BN from 'bn.js'; import { TriadProtocol as TriadProtocolIDL } from './types/triad_protocol'; import { OpenOrderArgs, UserTrade, CreateCustomerArgs, MarketBidOrderArgs, CancelBidOrderArgs, CancelAskOrderArgs, PlaceBidOrderArgs, PlaceAskOrderArgs, BookOrder, MarketAskOrderArgs, RpcOptions, OrderDirection, CloseOrderArgs, CreateMarketArgs, CreatePoolArgs, UpdateMarketWinningDirectionArgs } from './types'; import Stake from './stake'; import Poseidon from './poseidon'; import Claim from './claim'; export * from './types'; export * from './utils/helpers'; export * from './utils/merkle'; export * from './utils/feeCalculator'; export default class TriadProtocol { private connection; private wallet; private rpcOptions; program: Program<TriadProtocolIDL>; provider: AnchorProvider; stake: Stake; poseidon: Poseidon; claim: Claim; constructor(connection: Connection, wallet: Wallet, rpcOptions: RpcOptions); /** * Get My User Trades from a user authority * @param wallet - User wallet PublicKey */ getMyUserTrades(wallet: PublicKey): Promise<UserTrade[]>; /** * Get User Orders * @param wallet - User wallet PublicKey */ getUserOrders(wallet: PublicKey): Promise<import("./types").Order[]>; /** * Get User Orders By Market ID * @param wallet - User wallet PublicKey * @param marketId - The ID of the market */ getUserOrdersByMarketId(wallet: PublicKey, marketId: number): Promise<import("./types").Order[]>; /** * Get all User Book Orders * @param wallet - User wallet PublicKey */ getUserBookOrders(wallet: PublicKey): Promise<BookOrder[]>; /** * Get User Book Orders By Market ID */ getUserBookOrdersByMarketId(wallet: PublicKey, marketId: number): Promise<BookOrder[]>; /** * Get Costumer By Wallet Address * @param wallet - The wallet address of the customer */ getCustomerByWallet(wallet: PublicKey): Promise<import("./types").Customer>; /** * Get Customer By ID * @param customerId - The ID of the customer */ getCustomerById(customerId: number): Promise<import("./types").Customer>; /** * Get User Trade PDA * @param wallet - User wallet PublicKey * @param userNonce - The nonce of the user */ getUserPDA(wallet: PublicKey, userNonce?: number): PublicKey; /** * Get User Trade * @param wallet - User wallet PublicKey * @param userNonce - The nonce of the user */ getUserTradeByNonce(wallet: PublicKey, userNonce?: number): Promise<{ bump: number; authority: PublicKey; padding1: number[]; padding2: number[]; padding3: number[]; orders: { ts: BN; orderId: BN; filledShares: BN; marketId: BN; orderStatus: ({ open?: never; closed?: never; claimed?: never; liquidated?: never; waiting?: never; } & { init: Record<string, never>; }) | ({ init?: never; closed?: never; claimed?: never; liquidated?: never; waiting?: never; } & { open: Record<string, never>; }) | ({ init?: never; open?: never; claimed?: never; liquidated?: never; waiting?: never; } & { closed: Record<string, never>; }) | ({ init?: never; open?: never; closed?: never; liquidated?: never; waiting?: never; } & { claimed: Record<string, never>; }) | ({ init?: never; open?: never; closed?: never; claimed?: never; waiting?: never; } & { liquidated: Record<string, never>; }) | ({ init?: never; open?: never; closed?: never; claimed?: never; liquidated?: never; } & { waiting: Record<string, never>; }); price: BN; padding1: number[]; totalShares: BN; orderType: ({ limit?: never; } & { market: Record<string, never>; }) | ({ market?: never; } & { limit: Record<string, never>; }); orderDirection: ({ flop?: never; } & { hype: Record<string, never>; }) | ({ hype?: never; } & { flop: Record<string, never>; }); userNonce: number; orderSide: ({ ask?: never; } & { bid: Record<string, never>; }) | ({ bid?: never; } & { ask: Record<string, never>; }); padding2: number[]; createdAt: BN; padding3: number[]; isTrdPayout: boolean; padding: number[]; }[]; nonce: number; isSubUser: boolean; poseidon: number; padding: number[]; }>; /** * Get All Pools */ getAllPools(): Promise<import("./types").Pool[]>; /** * Get All Markets */ getAllMarkets(): Promise<import("./types").Market[]>; /** * Get Pool By ID * @param poolId - The ID of the pool */ getPoolById(poolId: number): Promise<import("./types").Pool>; /** * Get Market By ID * @param marketId - The ID of the market */ getMarketById(marketId: number): Promise<import("./types").Market>; /** * Get Market By Address * @param marketAddress - The address of the market */ getMarketByAddress(marketAddress: PublicKey): Promise<import("./types").Market>; /** * Get Current Market ID */ nextMarketId(): Promise<number>; /** * Get Next Customer ID */ nextCustomerId(): Promise<number>; /** * Get Next Pool ID */ nextPoolId(): Promise<number>; /** * Create Market * @param args.markets - Array of markets to create * @param args.markets.marketId - Market ID * @param args.markets.startTime - start time * @param args.markets.endTime - end time * @param args.markets.question - question (max 80 characters) * @param args.markets.liquidityAtStart - liquidity at start * @param args.markets.payoutFee - payout fee (to add affiliate system) * @param args.customer - The customer of the market * @param args.poolId - The ID of the pool */ createMarket({ markets, customer, poolId }: CreateMarketArgs): Promise<string | import("@solana/web3.js").VersionedTransaction>; /** * Create Pool * @param poolId - The ID of the pool * @param question - The question of the pool * @param markets - The markets of the pool */ createPool({ poolId, question, markets, customer, startTime, endTime, feeBps, payoutFee, isFast }: CreatePoolArgs): Promise<string | import("@solana/web3.js").VersionedTransaction>; /** * Resolve Market * @param args.marketId - The ID of the Market * @param args.poolId - The ID of the Pool * @param args.winningDirection - The Winning Direction of the Market */ updateMarketWinningDirection({ marketId, poolId, winningDirection }: UpdateMarketWinningDirectionArgs): Promise<string | import("@solana/web3.js").VersionedTransaction>; /** * Update Market Payout * @param marketId - The ID of the market * @param poolId - The ID of the pool * @param allowPayout - Whether to allow the market to payout */ updateMarketPayout({ marketId, poolId, allowPayout }: { marketId: number; poolId?: number; allowPayout: boolean; }): Promise<string | import("@solana/web3.js").VersionedTransaction>; /** * Update Market End * @param marketId - The ID of the market * @param marketEnd - The end time of the market */ updateMarketEnd({ marketId, marketEnd }: { marketId: number; marketEnd: number; }): Promise<string | import("@solana/web3.js").VersionedTransaction>; /** * Update Market Question * @param marketId - The ID of the market * @param question - The question of the market */ updateMarketQuestion({ marketId, question }: { marketId: number; question: string; }): Promise<string | import("@solana/web3.js").VersionedTransaction>; /** * Collect Market Fee * @param args.markets - The markets to collect the fee from * @param args.markets.marketAddress - The address of the market * @param args.markets.customerId - The ID of the customer * @param args.markets.customerFeeRecipient - The address of the customer fee recipient */ collectMarketFee(markets: { marketAddress: PublicKey; customerId: number; customerFeeRecipient: PublicKey; }[]): Promise<string | import("@solana/web3.js").VersionedTransaction>; /** * Close Order Book * @param marketIds - Market IDs */ closeOrderBook(marketIds: number[]): Promise<string | import("@solana/web3.js").VersionedTransaction>; /** * Update Pool Question * @param poolId - Pool ID * @param question - Question */ updatePoolQuestion(poolId: number, question: string): Promise<string | import("@solana/web3.js").VersionedTransaction>; /** * Open Order * @param args.marketId - The ID of the Market * @param args.amount - The amount of the Order * @param args.direction - The direction of the Order * @param args.mint - The mint of the Order * @param args.token - The token to use for the Order */ openOrder({ marketId, amount, direction, mint, token }: OpenOrderArgs): Promise<string | import("@solana/web3.js").VersionedTransaction>; /** * Close Order * @param args.marketId - The ID of the Market * @param args.orderId - The ID of the Order * @param args.userNonce - The nonce of the user */ closeOrder({ marketId, orderId, userNonce }: CloseOrderArgs): Promise<string | import("@solana/web3.js").VersionedTransaction>; /** * Payout Order * @param args.marketId - The ID of the Market * @param args.orderId - The ID of the Order to Payout * @param args.userNonce - The nonce of the user * @param args.mint - The mint of the market */ payoutOrder(orders: { marketId: number; orderId: number; userNonce: number; mint: PublicKey; }[]): Promise<string | import("@solana/web3.js").VersionedTransaction>; /** * Create Sub User Trade * @param user - User PublicKey the main user */ createSubUserTrade(user: PublicKey): Promise<string | import("@solana/web3.js").VersionedTransaction>; /** * Create Customer * @param args.id - The ID of the customer * @param args.name - The name of the customer * @param args.authority - The authority of the customer * @param args.feeRecipient - The fee recipient of the customer */ createCustomer({ id, name, authority, feeRecipient }: CreateCustomerArgs): Promise<string | import("@solana/web3.js").VersionedTransaction>; /** * Get User Trade Ixs */ getUserTradeIxs(): Promise<{ userTradePDA: PublicKey; ixs: TransactionInstruction[]; nonce: number; } | { userTradePDA: PublicKey; ixs: TransactionInstruction[]; nonce?: undefined; }>; /** * Get User Trade Nonce * @param marketId - The ID of the Market * @param orderDirection - The direction of the Order */ getUserTradeNonce(marketId: number, orderDirection: OrderDirection): Promise<{ userTradePDA: PublicKey; userTradeIxs: TransactionInstruction[]; }>; /** * Place Bid Order * @param args.orders - Array of orders to execute * @param args.orders.marketId - The ID of the Market * @param args.orders.amount - The amount of the Order * @param args.orders.price - The price of the Order * @param args.orders.orderDirection - The direction of the Order * @param args.mint - The mint of the Order * @param args.isTrdPayout - Whether to payout in TRD or not */ placeBidOrder({ orders, isTrdPayout }: PlaceBidOrderArgs): Promise<string | import("@solana/web3.js").VersionedTransaction>; /** * Place Ask Order * @param args.marketId - The ID of the Market * @param args.orders - Array of orders to execute * @param args.orders.amount - The amount of the Order * @param args.orders.price - The price of the Order * @param args.orders.bidOrderId - The ID of the Bid Order * @param args.orders.bidNonce - The nonce of the Bid Order */ placeAskOrder({ orders }: PlaceAskOrderArgs): Promise<string | import("@solana/web3.js").VersionedTransaction>; /** * Cancel Bid Order * @param args.orders.orderId - The ID of the Order * @param args.orders.userNonce - The nonce of the user * @param args.orders.orderDirection - The direction of the Order */ cancelBidOrder({ orders }: CancelBidOrderArgs): Promise<string | import("@solana/web3.js").VersionedTransaction>; /** * Cancel Ask Order * @param args.marketId - The ID of the Market * @param args.orders.orderId - The ID of the Order * @param args.orders.userNonce - The nonce of the user * @param args.orders.orderDirection - The direction of the Order */ cancelAskOrder({ marketId, orders }: CancelAskOrderArgs): Promise<string | import("@solana/web3.js").VersionedTransaction>; /** * Market Bid Order * @param args.marketId - The ID of the Market * @param args.amount - The amount of the Order * @param args.orderDirection - The direction of the Order * @param args.isTrdPayout - Whether to payout in TRD or not */ marketBidOrder({ marketId, amount, orderDirection, isTrdPayout }: MarketBidOrderArgs): Promise<string | import("@solana/web3.js").VersionedTransaction>; /** * Market Ask Order * @param args.marketId - The ID of the Market * @param args.orders - Array of orders to execute * @param args.orders.shares - The amount of shares to sell * @param args.orders.bidOrderId - The ID of the Bid Order * @param args.orders.userNonce - The nonce of the user * @param args.orderDirection - The direction of the Order */ marketAskOrder({ marketId, orders, orderDirection }: MarketAskOrderArgs): Promise<string | import("@solana/web3.js").VersionedTransaction>; /** * Get Orders By Market ID * @param marketId - Market ID */ getOrderBook(marketId: number): Promise<{ marketId: number; rewardsAvailable: string; rewardsClaimed: string; spreadToReward: string; hype: { bid: BookOrder[]; ask: BookOrder[]; }; flop: { bid: BookOrder[]; ask: BookOrder[]; }; }>; /** * Update Customer Fee * @param customerId - Customer ID * @param feeBps - Fee in basis points */ updateCustomerFee({ customerId, feeBps }: { customerId: number; feeBps: number; }): Promise<string | import("@solana/web3.js").VersionedTransaction>; }