56 lines
1.9 KiB
TypeScript
56 lines
1.9 KiB
TypeScript
import { clusterApiUrl, Connection, Keypair, LAMPORTS_PER_SOL } from '@solana/web3.js';
|
|
import { createMint, getOrCreateAssociatedTokenAccount, mintTo, transfer } from '../src'; // @FIXME: replace with @solana/spl-token
|
|
|
|
(async () => {
|
|
// Connect to cluster
|
|
const connection = new Connection(clusterApiUrl('devnet'), 'confirmed');
|
|
|
|
// Generate a new wallet keypair and airdrop SOL
|
|
const fromWallet = Keypair.generate();
|
|
const fromAirdropSignature = await connection.requestAirdrop(fromWallet.publicKey, LAMPORTS_PER_SOL);
|
|
|
|
// Wait for airdrop confirmation
|
|
await connection.confirmTransaction(fromAirdropSignature);
|
|
|
|
// Generate a new wallet to receive newly minted token
|
|
const toWallet = Keypair.generate();
|
|
|
|
// Create new token mint
|
|
const mint = await createMint(connection, fromWallet, fromWallet.publicKey, null, 9);
|
|
|
|
// Get the token account of the fromWallet address, and if it does not exist, create it
|
|
const fromTokenAccount = await getOrCreateAssociatedTokenAccount(
|
|
connection,
|
|
fromWallet,
|
|
mint,
|
|
fromWallet.publicKey
|
|
);
|
|
|
|
// Get the token account of the toWallet address, and if it does not exist, create it
|
|
const toTokenAccount = await getOrCreateAssociatedTokenAccount(connection, fromWallet, mint, toWallet.publicKey);
|
|
|
|
// Mint 1 new token to the "fromTokenAccount" account we just created
|
|
let signature = await mintTo(
|
|
connection,
|
|
fromWallet,
|
|
mint,
|
|
fromTokenAccount.address,
|
|
fromWallet.publicKey,
|
|
1000000000,
|
|
[]
|
|
);
|
|
console.log('mint tx:', signature);
|
|
|
|
// Transfer the new token to the "toTokenAccount" we just created
|
|
signature = await transfer(
|
|
connection,
|
|
fromWallet,
|
|
fromTokenAccount.address,
|
|
toTokenAccount.address,
|
|
fromWallet.publicKey,
|
|
1000000000,
|
|
[]
|
|
);
|
|
console.log('transfer tx:', signature);
|
|
})();
|