@triadxyz/triad-protocol
Version:
<div align="center"> <h1>Triad Protocol</h1> </div>
431 lines (430 loc) • 16.1 kB
TypeScript
/// <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>;
}