@symmetry-hq/baskets-v2-sdk
Version:
Symmetry Baskets V2 SDK
147 lines (146 loc) • 4.56 kB
TypeScript
import { PublicKey } from "@solana/web3.js";
import { BN, Program } from "@coral-xyz/anchor";
import { BasketsProgram } from "../idl/types";
import { OraclePrice } from "../utils/oracle";
export declare const BASKETS_STATE_SIZE = 28189;
export interface BasketState {
version: number;
ownAddress: PublicKey;
basketType: number;
basketPda: PublicKey;
mint: PublicKey;
supplyOutstanding: BN;
lastPrice: BN;
startingPrice: BN;
highestPrice: BN;
creator: PublicKey;
creatorDepositFeeBps: number;
creatorManagementFeeBps: number;
creatorPerformanceFeeBps: number;
host: PublicKey;
hostDepositFeeBps: number;
hostManagementFeeBps: number;
hostPerformanceFeeBps: number;
managers: PublicKey[];
managersWeightBps: number[];
managersAuthority: number[];
managersDepositFeeBps: number;
managersPerformanceFeeBps: number;
managersManagementFeeBps: number;
basketDepositFeeBps: number;
basketWithdrawFeeBps: number;
rebalanceIntervalSeconds: BN;
rebalanceThresholdBps: number;
rebalanceSlippageBps: number;
lpThresholdBps: number;
allowAutomation: number;
allowLp: number;
lamportsForAutomation: BN;
symbolLength: number;
symbol: number[];
nameLength: number;
name: number[];
uriLength: number;
uri: number[];
metadataAccount: PublicKey;
lookupTable1: PublicKey;
lookupTable2: PublicKey;
otherLookupTable1: PublicKey;
otherLookupTable2: PublicKey;
writeVersion: BN;
numTokens: number;
compositionMints: PublicKey[];
compositionDecimals: number[];
compositionOracleType: number[];
compositionOracle1: PublicKey[];
compositionOracle2: PublicKey[];
compositionTargetWeights: number[];
compositionAmounts: BN[];
tokenPrices: BN[];
tokenPriceUpdateTimestamps: BN[];
lastRebalanceTimestamp: BN[];
extraData: PublicKey[];
}
export interface ParsedBasketState {
version: number;
ownAddress: string;
basketType: number;
basketPda: string;
mint: string;
supplyOutstanding: number;
lastPrice: number;
startingPrice: number;
highestPrice: number;
creator: string;
creatorDepositFeeBps: number;
creatorManagementFeeBps: number;
creatorPerformanceFeeBps: number;
host: string;
hostDepositFeeBps: number;
hostManagementFeeBps: number;
hostPerformanceFeeBps: number;
managers: string[];
managersWeightBps: number[];
managersAuthority: number[];
managersDepositFeeBps: number;
managersPerformanceFeeBps: number;
managersManagementFeeBps: number;
basketDepositFeeBps: number;
basketWithdrawFeeBps: number;
rebalanceIntervalSeconds: number;
rebalanceThresholdBps: number;
rebalanceSlippageBps: number;
lpThresholdBps: number;
allowAutomation: number;
allowLp: number;
lamportsForAutomation: number;
metadataAccount: string;
lookupTable1: string;
lookupTable2: string;
otherLookupTable1: string;
otherLookupTable2: string;
writeVersion: number;
numTokens: number;
compositionMints: string[];
compositionDecimals: number[];
compositionOracleType: number[];
compositionOracle1: string[];
compositionOracle2: string[];
compositionTargetWeights: number[];
compositionAmounts: number[];
tokenPrices: number[];
tokenPriceUpdateTimestamps: number[];
lastRebalanceTimestamp: number[];
metadata: any;
tvl: any;
tokenValues: any;
}
export declare function fetchBasketState(program: Program<BasketsProgram>, basket: PublicKey): Promise<BasketState>;
export declare function parseBasketState(basketState: BasketState): ParsedBasketState;
export declare function getBasketTokenPrices(program: Program<BasketsProgram>, basketState: BasketState): Promise<OraclePrice[]>;
export interface RebalanceInfo {
token: PublicKey;
tokenDecimals: number;
tokenPrice: number;
index: number;
currentAmount: number;
currentWeight: number;
currentValue: number;
targetWeight: number;
targetValue: number;
valueDiff: number;
maxSpendAmount: number;
}
export declare function computeRebalanceInfos(params: {
basketState: BasketState;
oraclePrices: OraclePrice[];
}): {
tvl: number;
tokenValues: any[];
rebalanceInfos: RebalanceInfo[];
};
export declare function getBasketTvl(program: Program<BasketsProgram>, basketState: BasketState): Promise<{
tvl: number;
tokenValues: any[];
rebalanceInfos: RebalanceInfo[];
}>;