Typescript
SPL Token di Web3.js

SPL Token di Web3.js

Program Token

SPL Token dengan Web3JS

Di Solana, semua hal yang berkaitan dengan token ditangani oleh Program SPL Token dan Program Token2022: kerangka token asli Solana yang mendefinisikan bagaimana semua token dibuat, dikelola, dan ditransfer.

Ini adalah program tunggal dan terpadu yang menangani semua operasi token di seluruh jaringan, memastikan konsistensi dan interoperabilitas.

Keputusan untuk memiliki antarmuka tunggal dan terpadu untuk semua token di Solana menciptakan implementasi yang mudah yang dapat direplikasi di semua dApps (aplikasi terdesentralisasi) dan integrasi (seperti dompet, ...)

Mari kita mulai dengan menginstal paket yang diperlukan untuk bekerja dengan program SPL Token menggunakan Web3.js:

npm i @solana/spl-token

Akun Mint dan Token

Di balik layar, membuat akun Mint dan Token cukup "rumit". Ada berbagai instruksi yang memerlukan input dan akun yang berbeda; akun perlu dibuat bebas sewa sebelum kita benar-benar dapat menginisialisasinya, ...

Akun Mint

Tanpa abstraksi apa pun, membuat akun Mint akan terlihat seperti ini:

ts
import { Keypair, sendAndConfirmTransaction, SystemProgram, Transaction } from "@solana/web3.js";

import {
  createInitializeMint2Instruction,
  MINT_SIZE,
  getMinimumBalanceForRentExemptMint,
  TOKEN_PROGRAM_ID,
} from "@solana/spl-token";

const mint = Keypair.generate();

const mintRent = await getMinimumBalanceForRentExemptMint(connection);

const createAccountInstruction = SystemProgram.createAccount({
  fromPubkey: feePayer.publicKey,
  newAccountPubkey: mint.publicKey,
  space: MINT_SIZE,
  lamports: mintRent,
  programId: TOKEN_PROGRAM_ID,
});

const initializeMintInstruction = createInitializeMint2Instruction(
  mint.publicKey, // mint pubkey
  6, // decimals
  feePayer.publicKey, // mint authority
  null, // freeze authority
  TOKEN_PROGRAM_ID,
);

const transaction = new Transaction().add(createAccountInstruction, initializeMintInstruction);

const signature = await sendAndConfirmTransaction(connection, transaction, [keypair, mint]);

console.log(
  `Mint created! Check out your TX here: https://explorer.solana.com/tx/${signature}?cluster=devnet`,
);
Expand
[21 more lines]

Untungnya, paket @solana/spl-token memiliki beberapa abstraksi. Jadi kita dapat membuat akun Mint dengan satu fungsi createMint() seperti ini:

ts
const mint = await createMint(
  connection, // connection
  keypair, // payer
  keypair.publicKey, // mint authority
  null, // freeze authority
  6, // decimals
);

Akun Token

Hal yang sama berlaku untuk akun Token. Jika kita membuatnya tanpa abstraksi apa pun, itu akan terlihat seperti ini:

ts
import { Keypair, sendAndConfirmTransaction, SystemProgram, Transaction } from "@solana/web3.js";

import {
  createInitializeAccount3Instruction,
  ACCOUNT_SIZE,
  getMinimumBalanceForRentExemptAccount,
  TOKEN_PROGRAM_ID,
} from "@solana/spl-token";

const token = Keypair.generate();

const tokenRent = await getMinimumBalanceForRentExemptAccount(connection);

const createAccountInstruction = SystemProgram.createAccount({
  fromPubkey: feePayer.publicKey,
  newAccountPubkey: token.publicKey,
  space: ACCOUNT_SIZE,
  lamports: tokenRent,
  programId: TOKEN_PROGRAM_ID,
});

const initializeTokenInstruction = createInitializeAccount3Instruction(
  token.publicKey, // token pubkey
  mint.publicKey, // mint pubkey
  feePayer.publicKey, // owner pubkey
  TOKEN_PROGRAM_ID,
);

const transaction = new Transaction().add(createAccountInstruction, initializeTokenInstruction);

const signature = await sendAndConfirmTransaction(connection, transaction, [keypair, token]);

console.log(
  `Token created! Check out your TX here: https://explorer.solana.com/tx/${signature}?cluster=devnet`,
);
Expand
[20 more lines]

Tetapi sama seperti akun Mint, paket @solana/spl-token memiliki beberapa abstraksi untuk membuat akun Token. Kita dapat menggunakan fungsi createAccount() seperti ini:

ts
const token = await createAccount(
  connection, // connection
  keypair, // payer
  mint.publicKey, // mint pubkey
  keypair.publicKey, // owner pubkey
);

Akun Token Terkait

Hal yang sama berlaku untuk akun Associated Token, tetapi abstraksinya tidak terkait dengan pembuatan akun seperti untuk akun Mint dan Token, melainkan terutama terkait dengan derivasi alamat.

Jadi beginilah cara kita membuat akun Associated Token tanpa abstraksi apapun:

ts
import { sendAndConfirmTransaction, Transaction } from "@solana/web3.js";

import {
  TOKEN_PROGRAM_ID,
  createAssociatedTokenAccountIdempotentInstruction,
  getAssociatedTokenAddress,
} from "@solana/spl-token";

const associatedTokenAccount = await getAssociatedTokenAddress(
  mint.publicKey, // mint pubkey
  keypair.publicKey, // owner pubkey
  false, // allow owner off-curve
  TOKEN_PROGRAM_ID,
);

// Create ATA creation instructions for all accounts
const createAtaInstruction = createAssociatedTokenAccountIdempotentInstruction(
  keypair.publicKey, // payer
  associatedTokenAccount, // associated token account address
  keypair.publicKey, // owner
  mint.publicKey, // mint
  TOKEN_PROGRAM_ID,
);

const transaction = new Transaction().add(createAtaInstruction);

const signature = await sendAndConfirmTransaction(connection, transaction, [keypair]);

console.log(
  `Associated Token created! Check out your TX here: https://explorer.solana.com/tx/${signature}?cluster=devnet`,
);
Expand
[16 more lines]

Dan beginilah tampilannya dengan abstraksi:

ts
const ata = await getOrCreateAssociatedTokenAccount(
  connection, // connection
  keypair, // payer
  mint, // mint pubkey
  keypair.publicKey, // owner pubkey
);

Seperti yang Anda lihat, fungsi tersebut disebut getOrCreateAssociatedTokenAccount(). Ini karena mungkin saja akun Associated Token sudah dibuat sebelumnya dan kita tidak ingin transaksi kita gagal karenanya. Jadi yang dilakukannya adalah membuat atau hanya mengembalikan alamat ATA.

Daftar Isi
Lihat Sumber
Blueshift © 2026Commit: 3c44267