@symmetry-hq/baskets-sdk
Version:
Software Development Kit for interacting with Symmetry Baskets Program
278 lines (277 loc) • 7.31 kB
TypeScript
import { AddressLookupTableAccount, PublicKey, TransactionInstruction, TransactionSignature } from "@solana/web3.js";
import { BN } from "@coral-xyz/anchor";
export declare const BASKETS_PROGRAM_ID: PublicKey;
export declare const BASKETS_PROGRAM_PDA: PublicKey;
export declare const BASKETS_LOOKUP_TABLE_1: PublicKey;
export declare const BASKETS_LOOKUP_TABLE_2: PublicKey;
export declare const TOKEN_LIST_ADDRESS: PublicKey;
export declare const TOKEN_STATS_ADDRESS: PublicKey;
export declare const DATABASE_ADDESS: PublicKey;
export declare const CURVE_DATA_ADDRESS: PublicKey;
export declare const CREATE_FEE_ACCOUNT: PublicKey;
export declare const BUY_FEE_ACCOUNT: PublicKey;
export declare const BUY_FEE_WALLET: PublicKey;
export declare const REBALANCE_FEE_WALLET: PublicKey;
export declare const REBALANCE_FEE_ACCOUNT: PublicKey;
export declare const SWAP_FEE_ACCOUNT: PublicKey;
export declare const PRISM_AGGREGATOR: PublicKey;
export declare const JUP_AGGREGATOR: PublicKey;
export declare const BEYOND_LST_BASKET: PublicKey;
export declare const SWB_PID: PublicKey;
export declare const NUM_OF_DAYS_IN_DATABASE = 460;
export declare const COMBINED_TOKENS_IN_A_BASKET = 15;
export declare const NUM_OF_TOKENS_IN_BASKET = 20;
export declare const NUM_OF_TOKENS_IN_ASSET_POOL = 200;
export declare const WEIGHT_MULTIPLIER = 10000;
export declare const EXPO_DIVIDER = 100;
export declare const BPS_DIVIDER = 10000;
export declare const ADDITIONAL_FEE = 15000;
export declare const ADDITIONAL_UNITS = 1000000;
export declare class BasketError extends Error {
txId: TransactionSignature;
constructor(message: string, txId?: TransactionSignature);
}
export type BasketFilter = "manager" | "host";
export type FilterOption = {
filterType: BasketFilter;
filterPubkey: PublicKey;
};
export declare enum FilterType {
Fixed = 0,
MarketCap = 1,
Volume = 2,
Performance = 3
}
export declare enum WeightType {
Fixed = 0,
MarketCap = 1,
Volume = 2,
Performance = 3
}
export declare enum FilterTime {
Day = 0,
Week = 1,
Month = 2,
Quarter = 3,
HalfYear = 4,
Year = 5
}
export declare enum WeightTime {
Day = 0,
Week = 1,
Month = 2,
Quarter = 3,
HalfYear = 4,
Year = 5
}
export declare enum SortBy {
DescendingOrder = 0,
AscendingOrder = 1
}
export type Rule = {
filterBy: FilterType;
filterDays: FilterTime;
sortBy: SortBy;
totalWeight: number;
fixedAsset: number;
numAssets: number;
weightBy: WeightType;
weightDays: WeightTime;
weightExpo: number;
excludeAssets: number[];
ruleAssets?: number[];
};
export type CreateBasketParams = {
name: string;
symbol: string;
uri: string;
hostPlatform: PublicKey;
hostPlatformFee: number;
manager: PublicKey;
managerFee: number;
activelyManaged: number;
assetPool: number[];
refilterInterval: number;
reweightInterval: number;
rebalanceInterval: number;
rebalanceThreshold: number;
rebalanceSlippage: number;
lpOffsetThreshold: number;
disableRebalance: boolean;
disableLp: boolean;
rules: Rule[];
};
export type SimpleCreateParams = {
name: string;
symbol: string;
uri: string;
hostPlatform: PublicKey;
hostPlatformFee: number;
manager: PublicKey;
managerFee: number;
activelyManaged: number;
rebalanceInterval: number;
rebalanceThreshold: number;
rebalanceSlippage: number;
lpOffsetThreshold: number;
disableRebalance: boolean;
disableLp: boolean;
composition: {
token: PublicKey;
weight: number;
}[];
feeDelegate?: PublicKey;
};
export type SimpleEditParams = {
managerFee: number;
rebalanceInterval: number;
rebalanceThreshold: number;
rebalanceSlippage: number;
lpOffsetThreshold: number;
disableRebalance: boolean;
disableLp: boolean;
composition: {
token: PublicKey;
weight: number;
}[];
feeDelegate?: PublicKey;
};
export type BasketStateChainData = {
version: BN;
manager: PublicKey;
fundToken: PublicKey;
managerFee: BN;
supplyOutstanding: BN;
activelyManaged: BN;
activeBuyStates: BN;
sellState: BN;
rebalanceSellState: BN;
hostPubkey: PublicKey;
hostFee: BN;
numOfTokens: BN;
currentCompToken: BN[];
currentCompAmount: BN[];
lastRebalanceTime: BN[];
targetWeight: BN[];
weightSum: BN;
currentWeight: BN[];
fundWorth: BN;
lastUpdateTime: BN;
refilterInterval: BN;
reweightInterval: BN;
rebalanceInterval: BN;
rebalanceThreshold: BN;
rebalanceSlippage: BN;
lpOffsetThreshold: BN;
lastRefilterTime: BN;
lastReweightTime: BN;
rulesReady: BN;
assetPool: BN[];
numOfRules: BN;
rules: {
filterBy: BN;
filterDays: BN;
sortBy: BN;
totalWeight: BN;
fixedAsset: BN;
numAssets: BN;
weightBy: BN;
weightDays: BN;
weightExpo: BN;
excludeNum: BN;
excludeAssets: BN[];
ruleAssets: BN[];
}[];
numRuleTokens: BN;
ruleTokens: BN[];
ruleTokenWeights: BN[];
messageDigestFive: number[];
disableRebalance: BN;
disableLp: BN;
allowMultiAssetContribution: number;
symbolLength: number;
symbol: number[];
nameLength: number;
name: number[];
uriLength: number;
uri: number[];
feeDelegate: PublicKey;
extraBytes: number[];
};
export type BuyStateChainData = {
fund: PublicKey;
buyer: PublicKey;
fundManager: PublicKey;
hostPlatform: PublicKey;
buyerFundTokenAccount: PublicKey;
usdcContributed: BN;
usdcLeft: BN;
token: BN[];
amountToSpend: BN[];
amountBought: BN[];
creationTimestamp: BN;
contributedValue: BN;
};
export type TokenSettings = {
id: number;
symbol: string;
name: string;
tokenMint: string;
decimals: number;
coingeckoId: string;
pdaTokenAccount: string;
oracleType: string;
oracleAccount: string;
oracleIndex: number;
oracleConfidencePct: number;
fixedConfidenceBps: number;
tokenSwapFeeBeforeTwBps: number;
tokenSwapFeeAfterTwBps: number;
isLive: boolean;
lpOn: boolean;
useCurveData: boolean;
additionalData: number[];
};
export type JupSwapData = {
type: String;
programId: PublicKey;
accounts: {
pubkey: PublicKey;
isSigner: boolean;
isWritable: boolean;
}[];
firstIxEnd: number;
firstIxAccounts: number;
dataLength: number;
data: Buffer;
fromTokenId: number;
midTokenPda: string;
toTokenId: number;
fromAmount: number;
toAmount: number;
slippageBps: number;
feeBps: number;
lookupTableAccounts: AddressLookupTableAccount[];
};
export declare enum Side {
To = 0,
From = 1
}
export type RebalanceInfo = {
tokenId: number;
tokenAccountFrom: string;
mintFrom: string;
oracleFrom: string;
tokenAccountTo: string;
mintTo: string;
oracleTo: string;
amountFrom: number;
decimals: number;
volume: number;
side: Side;
};
export type TransactionToSend = {
payerKey: PublicKey;
instructions: TransactionInstruction[];
lookupTables: AddressLookupTableAccount[];
};