@cobaltx/sdk-v2
Version:
An SDK for building applications on top of CobaltX.
65 lines (56 loc) • 2.05 kB
text/typescript
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);
}
}