@symmetry-hq/baskets-sdk
Version:
Software Development Kit for interacting with Symmetry Baskets Program
74 lines (73 loc) • 3.4 kB
TypeScript
import { Program } from "@coral-xyz/anchor";
import { PublicKey } from "@solana/web3.js";
import { Rule, CreateBasketParams } from "./config";
import { BasketsIDL } from "./basketsIDL";
export interface DataPoint {
price: number;
circulatingSupply: number;
volume: number;
}
export interface BasketState {
currentCompToken: number[];
currentCompAmount: number[];
currentCompWeight: number[];
targetWeight: number[];
numOfTokens: number;
weightSum: number;
basketWorth: number;
lastRefilterTime: number;
lastReweightTime: number;
lastRebalanceTime: number;
singleRuleAssets: number[][];
ruleAssets: number[];
ruleWeights: number[];
numRuleTokens: number;
}
export interface TokenStats {
stats: Stats[][];
}
export interface Stats {
days: number;
performance: number;
volume: number;
mcap: number;
}
export declare function fetchDatabase(program: Program<BasketsIDL>, database: PublicKey): Promise<DataPoint[][]>;
export declare function defaultBasketState(): {
currentCompToken: number[];
currentCompAmount: number[];
currentCompWeight: never[] & number[];
targetWeight: never[] & number[];
numOfTokens: number;
weightSum: number;
basketWorth: number;
lastRefilterTime: number;
lastReweightTime: number;
lastRebalanceTime: number;
singleRuleAssets: any[];
ruleWeights: never[] & number[];
ruleAssets: never[] & number[];
numRuleTokens: number;
};
export declare function calculateStats(data: DataPoint[], days: number, index: number): number[];
export declare function updateTokenStats(data: DataPoint[][], index: number): TokenStats;
export declare function selectTokens(createBasketParams: CreateBasketParams, rule: Rule, tokenStats: TokenStats): any[];
export declare function refilter(createBasketParams: CreateBasketParams, tokenStats: TokenStats, basketState: BasketState): void;
export declare function calculateWeight(rawWeight: number, expo: number, weightBy: number): number;
export declare function generateWeights(tokenStats: TokenStats, rule: Rule, ruleAssets: any): {
token: any;
assetWeight: number;
}[];
export declare function combineRules(basketState: BasketState, ruleAssets: any, createBasketParams: CreateBasketParams): void;
export declare function addTargetAssets(basketState: BasketState): void;
export declare function removeTargetAssets(basketState: BasketState): void;
export declare function updateTargetAssets(basketState: BasketState): void;
export declare function reweight(createBasketParams: CreateBasketParams, tokenStats: TokenStats, basketState: BasketState): void;
export declare function rebalance(createBasketParams: CreateBasketParams, basketState: BasketState, data: DataPoint[][], day: number, tokenList: any): void;
export declare function updateBasketState(createBasketParams: CreateBasketParams, basketState: BasketState, tokenStats: TokenStats, database: DataPoint[][], day: number, tokenList: any): void;
export declare function updateCurrentWeights(data: DataPoint[][], day: number, basketState: BasketState, tokenList: any): void;
export declare function simulate(program: Program<BasketsIDL>, database: PublicKey, tokenList: PublicKey, createBasketParams: CreateBasketParams, simulationDays: number): Promise<{
price: number;
currentCompAmount: number[];
currentCompToken: number[];
}[]>;