1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from "@metaplex-foundation/mpl-token-metadata";
- import {
- Connection,
- Keypair,
- PublicKey,
- SystemProgram,
- SYSVAR_RENT_PUBKEY,
- TransactionInstruction,
- Transaction,
- sendAndConfirmTransaction,
- } from "@solana/web3.js";
- import { TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from "@solana/spl-token";
- import * as borsh from "borsh";
- import { Buffer } from "buffer";
- function createKeypairFromFile(path: string): Keypair {
- return Keypair.fromSecretKey(
- Buffer.from(JSON.parse(require("fs").readFileSync(path, "utf-8")))
- );
- }
- class Assignable {
- constructor(properties) {
- Object.keys(properties).map((key) => {
- return (this[key] = properties[key]);
- });
- }
- }
- class CreateTokenArgs extends Assignable {
- toBuffer() {
- return Buffer.from(borsh.serialize(CreateTokenArgsSchema, this));
- }
- }
- const CreateTokenArgsSchema = new Map([
- [
- CreateTokenArgs,
- {
- kind: "struct",
- fields: [["token_decimals", "u8"]],
- },
- ],
- ]);
- describe("Create Token", async () => {
- const connection = new Connection(
- `https://api.devnet.solana.com/`,
- "confirmed"
- );
- const payer = createKeypairFromFile(
- require("os").homedir() + "/.config/solana/id.json"
- );
- const program = createKeypairFromFile(
- "./program/target/deploy/program-keypair.json"
- );
- it("Create a Token-22 SPL-Token !", async () => {
- const mintKeypair: Keypair = Keypair.generate();
- const instructionData = new CreateTokenArgs({
- token_decimals: 9,
- });
- const instruction = new TransactionInstruction({
- keys: [
- { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account
- { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account
- { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Transaction Payer
- { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account
- { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program
- { pubkey: TOKEN_2022_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program
- ],
- programId: program.publicKey,
- data: instructionData.toBuffer(),
- });
- const signature = await sendAndConfirmTransaction(
- connection,
- new Transaction().add(instruction),
- [payer, mintKeypair]
- );
- console.log(`Token Mint Address: `, mintKeypair.publicKey.toBase58());
- console.log(`Transaction Signature: `, signature);
- });
- });
|