UNPKG

@cobaltx/sdk-v2

Version:

An SDK for building applications on top of CobaltX.

65 lines (56 loc) 2.05 kB
import { PublicKey } from "@solana/web3.js"; import { getNetworkConfig, NetworkName } from "@/config"; import { getTokenWSol } from "../cobaltx/token/constant"; import { PublicKeyish, SOLMint, validateAndParsePublicKey } from "../common/pubKey"; /** * A token is any fungible financial instrument on Solana, including SOL and all SPL tokens. */ export interface TokenProps { mint: PublicKeyish; decimals: number; symbol?: string; name?: string; skipMint?: boolean; isToken2022?: boolean; network?: NetworkName; } export class Token { public readonly symbol?: string; public readonly name?: string; public readonly decimals: number; public readonly isToken2022: boolean; public readonly network?: NetworkName; public readonly mint: PublicKey; /** * * @param mint - pass "sol" as mint will auto generate wsol token config */ public constructor({ mint, decimals, symbol, name, skipMint = false, isToken2022 = false, network }: TokenProps) { if (mint === SOLMint.toBase58() || (mint instanceof PublicKey && SOLMint.equals(mint))&& network) { this.decimals = getTokenWSol(network as NetworkName).decimals; this.symbol = getTokenWSol(network as NetworkName).symbol; this.name = getTokenWSol(network as NetworkName).name; this.mint = new PublicKey(getTokenWSol(network as NetworkName).address); this.isToken2022 = false; return; } this.decimals = decimals; this.symbol = symbol || mint.toString().substring(0, 6); this.name = name || mint.toString().substring(0, 6); this.mint = skipMint ? PublicKey.default : validateAndParsePublicKey({ publicKey: mint }); this.isToken2022 = isToken2022; } public static getWSol(network: NetworkName): Token { return new Token({ ...getTokenWSol(network), mint: getTokenWSol(network).address, }); } public equals(other: Token): boolean { // short circuit on reference equality if (this === other) { return true; } return this.mint.equals(other.mint); } }