solana-rpc-testing/configure/general/mint_utils.ts

60 lines
1.4 KiB
TypeScript

import * as splToken from "@solana/spl-token";
import { PublicKey, Connection, Keypair } from "@solana/web3.js";
export interface TokenData {
mint: PublicKey;
startingPrice: number;
nbDecimals: number;
priceOracle: Keypair | undefined;
}
export class MintUtils {
private conn: Connection;
private authority: Keypair;
constructor(conn: Connection, authority: Keypair) {
this.conn = conn;
this.authority = authority;
}
async createMint(nb_decimals = 6): Promise<PublicKey> {
const kp = Keypair.generate();
return await splToken.createMint(
this.conn,
this.authority,
this.authority.publicKey,
this.authority.publicKey,
nb_decimals,
kp
);
}
public async createMints(nbMints: number): Promise<PublicKey[]> {
return await Promise.all(
Array.from(Array(nbMints).keys()).map((_) => {
return this.createMint();
})
);
}
public async createNewToken(nbDecimals = 6, startingPrice = 1_000_000) {
const mint = await this.createMint(nbDecimals);
const tokenData: TokenData = {
mint: mint,
startingPrice: startingPrice,
nbDecimals: nbDecimals,
priceOracle: undefined,
};
return tokenData;
}
public async createTokenAccount(
mint: PublicKey,
payer: Keypair,
owner: PublicKey
) {
const account = Keypair.generate();
return splToken.createAccount(this.conn, payer, mint, owner, account);
}
}