@candy-swap/candy-sdk
Version:
Candy SDK for Solana
147 lines (146 loc) • 4.8 kB
TypeScript
import * as anchor from "@coral-xyz/anchor";
import { AnchorProvider, web3 } from "@coral-xyz/anchor";
import { PublicKey, TransactionInstruction } from "@solana/web3.js";
import BN from 'bn.js';
import { Raydium } from '@raydium-io/raydium-sdk-v2';
export interface InitTokenParams {
name: string;
symbol: string;
uri: string;
decimals: number;
}
export interface SwapParams {
amount: BN;
style: BN;
minOut: BN;
}
export interface Cfg {
swapFee: BN;
swapAdmin: PublicKey;
devFeeReceiver: PublicKey;
mint: PublicKey;
}
export * from "./utils";
export interface ProjectInfo {
currentPrice: {
reserveOne: BN;
reserveTwo: BN;
};
progress: number;
liquidity: number;
}
export declare class CandySDK {
private program;
private provider;
private raydium;
private cluster;
constructor(programId: PublicKey, provider: AnchorProvider);
/**
* Create new token
* @param name Token name
* @param symbol Token symbol
* @param uri Token URI
* @param decimals Decimal places
* @param creator Creator public key
* @param mintPk Token mint public key
* @param swapFee Swap fee
* @param swapAdmin Swap admin public key
* @returns Transaction to be signed and related account information
*/
createMint(name: string, symbol: string, uri: string, decimals: number, creator: PublicKey, mintPk: PublicKey, devFeeReciever?: PublicKey): Promise<{
liquidityAta: anchor.web3.PublicKey;
pool: anchor.web3.PublicKey;
instructions: anchor.web3.TransactionInstruction[];
mint: anchor.web3.PublicKey;
tokenAccount: anchor.web3.PublicKey;
dexConfigurationAccount: anchor.web3.PublicKey;
cfg: anchor.web3.PublicKey;
}>;
/**
* Swap tokens
* @param mint Token mint address
* @param amount Swap amount
* @param user User address
* @param style Trading style
* @param minOut Minimum output amount
* @returns Unsigned transaction and related account information
*/
swap(mint: PublicKey, params: SwapParams, user: PublicKey, swapAdmin?: PublicKey, devFeeReceiver?: PublicKey): Promise<{
instructions: Array<TransactionInstruction>;
userTokenAccount: PublicKey;
poolTokenAccount: PublicKey;
}>;
/**
* Set active status
* @param mint Token mint address
* @param active Active status
* @returns Transaction to be signed and related account information
*/
setActive(mint: PublicKey, active: boolean): Promise<anchor.web3.Transaction>;
/**
* Set configuration
* @param params Configuration parameters
* @returns Transaction to be signed and related account information
*/
setCfg(params: Cfg): Promise<anchor.web3.Transaction>;
/**
* Set curve configuration
* @param params Curve configuration parameters
* @returns Transaction to be signed and related account information
*/
setCurveCfg({ swapFee, swapAdmin, systemFee, mintFees, admin, }: {
swapFee: anchor.BN;
swapAdmin?: web3.PublicKey;
systemFee: anchor.BN;
mintFees: anchor.BN;
admin: web3.PublicKey;
}): Promise<anchor.web3.Transaction>;
/**
* Get liquidity pool information
* @param mint Token mint address
*/
getPoolInfo(mint: PublicKey): Promise<{
tokenOne: anchor.web3.PublicKey;
tokenTwo: anchor.web3.PublicKey;
totalSupply: anchor.BN;
reserveOne: anchor.BN;
reserveTwo: anchor.BN;
bump: number;
active: boolean;
}>;
/**
* Get project information, price and current progress
* @param mint Token mint address
* @returns Project information
*/
getProjectInfo(mint: PublicKey): Promise<ProjectInfo>;
/**
* Create CPMM pool
* @param baseToken Base token
* @param baseAmount Base token amount
* @param quoteAmount Quote token amount
* @returns
*/
createCpmmPool(baseToken: string, baseAmount: BN, quoteAmount: BN): Promise<{
pool: import("@raydium-io/raydium-sdk-v2").CreateCpmmPoolAddress;
}>;
initSdk(params?: {
loadToken?: boolean;
}): Promise<Raydium>;
/**
* Prepare liquidity
* @param mint Token mint address
* @returns
*/
ammPrepare(mint: PublicKey): Promise<string>;
/**
* Calculate output amount
* @param mint Token mint address
* @param amountIn Input amount
* @param direction Trading direction
* @param slippage Slippage percentage
* @returns Output amount
*/
computeAmountOut(mint: PublicKey, amountIn: BN, direction: 'buy' | 'sell', slippage?: number): Promise<anchor.BN>;
}
export default CandySDK;