Token trên Solana

Token là tài sản kỹ thuật số đại diện cho quyền sở hữu đối với các loại tài sản đa dạng. Token hóa cho phép số hóa quyền sở hữu tài sản. Token trên Solana được gọi là SPL (Solana Program Library) Token.

Phần này đề cập đến các khái niệm cơ bản về cách token được biểu diễn trên Solana. Tham khảo phần SPL Token Basics để xem các ví dụ mã nguồn.

Điểm chính

  • Token Programs chứa toàn bộ logic lệnh để tương tác với token trên mạng (cả fungible và non-fungible).

  • Mint Account đại diện cho một token cụ thể và lưu trữ metadata toàn cục về token như tổng nguồn cung và mint authority (địa chỉ được ủy quyền tạo đơn vị mới của token).

  • Token Account theo dõi quyền sở hữu cá nhân của token cho một mint account cụ thể cho một chủ sở hữu cụ thể.

  • Associated Token Account là token account được tạo với địa chỉ được lấy từ địa chỉ của chủ sở hữu và mint account.

Token Programs

Hệ sinh thái Solana có hai Token Programs chính. Mã nguồn cho cả hai chương trình bên dưới.

Token Program chứa toàn bộ logic lệnh để tương tác với token trên mạng (cả fungible và non-fungible). Tất cả token trên Solana thực chất là data accounts thuộc sở hữu của Token Program.

Token ProgramToken Program

Mint Account

Token trên Solana được xác định duy nhất bởi địa chỉ của Mint Account thuộc sở hữu của Token Program. Account này hoạt động như bộ đếm toàn cục cho một token cụ thể và lưu trữ dữ liệu như:

  • Supply: Tổng cung của token
  • Decimals: Độ chính xác thập phân của token
  • Mint authority: Tài khoản được ủy quyền tạo các đơn vị mới của token, tăng tổng cung
  • Freeze authority: Tài khoản được ủy quyền đóng băng token trong một Token Account, ngăn chúng bị chuyển hoặc đốt

Mint AccountMint Account

Chi tiết đầy đủ được lưu trữ trên mỗi mint account bao gồm:

Mint Account State
pub struct Mint {
/// Optional authority used to mint new tokens. The mint authority may only
/// be provided during mint creation. If no mint authority is present
/// then the mint has a fixed supply and no further tokens may be
/// minted.
pub mint_authority: COption<Pubkey>,
/// Total supply of tokens.
pub supply: u64,
/// Number of base 10 digits to the right of the decimal place.
pub decimals: u8,
/// Is `true` if this structure has been initialized
pub is_initialized: bool,
/// Optional authority to freeze token accounts.
pub freeze_authority: COption<Pubkey>,
}

Để tham khảo, đây là liên kết Solana Explorer đến USDC Mint Account.

Token Account

Token Program tạo Token Accounts để theo dõi quyền sở hữu cá nhân của từng đơn vị token. Một token account lưu trữ dữ liệu như:

  • Mint: Token mà token account nắm giữ các đơn vị
  • Owner: Tài khoản được ủy quyền chuyển token từ token account
  • Amount: Số lượng token mà token account hiện đang nắm giữ

Token AccountToken Account

Chi tiết đầy đủ được lưu trữ trên mỗi token account bao gồm:

Token Account State
pub struct Account {
/// The mint associated with this account
pub mint: Pubkey,
/// The owner of this account.
pub owner: Pubkey,
/// The amount of tokens this account holds.
pub amount: u64,
/// If `delegate` is `Some` then `delegated_amount` represents
/// the amount authorized by the delegate
pub delegate: COption<Pubkey>,
/// The account's state
pub state: AccountState,
/// If is_native.is_some, this is a native token, and the value logs the
/// rent-exempt reserve. An Account is required to be rent-exempt, so
/// the value is used by the Processor to ensure that wrapped SOL
/// accounts do not drop below this threshold.
pub is_native: COption<u64>,
/// The amount delegated
pub delegated_amount: u64,
/// Optional authority to close the account.
pub close_authority: COption<Pubkey>,
}

Một ví cần một token account cho mỗi token (mint) mà nó muốn nắm giữ, với địa chỉ ví được đặt làm chủ sở hữu token account. Mỗi ví có thể sở hữu nhiều token account cho cùng một token (mint), nhưng một token account chỉ có thể có một chủ sở hữu và nắm giữ các đơn vị của một token (mint).

Account RelationshipAccount Relationship

Lưu ý rằng dữ liệu của mỗi token account bao gồm một trường owner xác định ai có quyền đối với token account. Điều này khác với chủ sở hữu chương trình được chỉ định trong loại Account cơ bản, đó là Token Program cho tất cả token account.

Associated Token Account

Associated Token Account đơn giản hóa quá trình tìm địa chỉ token account cho một mint và chủ sở hữu cụ thể. Hãy nghĩ về Associated Token Account như là token account "mặc định" cho một mint và chủ sở hữu cụ thể.

Associated Token Account được tạo với địa chỉ được lấy từ địa chỉ của chủ sở hữu và địa chỉ của mint account. Điều quan trọng cần hiểu là Associated Token Account chỉ là một token account với một địa chỉ cụ thể.

Điều này giới thiệu một khái niệm quan trọng trong phát triển Solana: Program Derived Address (PDA). PDA lấy địa chỉ một cách xác định bằng cách sử dụng các đầu vào được xác định trước, giúp dễ dàng tìm địa chỉ của một tài khoản.

Associated Token AccountAssociated Token Account

Lưu ý rằng mỗi ví cần token account riêng của nó để nắm giữ token từ cùng một mint.

Mối quan hệ tài khoản mở rộngMối quan hệ tài khoản mở rộng

Ví dụ Token CLI

spl-token CLI giúp bạn thử nghiệm với SPL token. Các ví dụ dưới đây sử dụng terminal Solana Playground để chạy các lệnh CLI trực tiếp trong trình duyệt mà không cần cài đặt cục bộ.

Tạo token và tài khoản yêu cầu SOL cho tiền gửi rent tài khoản và phí giao dịch. Đối với người dùng Solana Playground lần đầu, hãy tạo ví Playground và chạy lệnh solana airdrop trong terminal Playground. Bạn cũng có thể nhận devnet SOL từ web faucet công khai.

Terminal
$
solana airdrop 2

Chạy spl-token --help để xem tất cả các lệnh có sẵn.

Terminal
$
spl-token --help

Để cài đặt spl-token CLI cục bộ, hãy chạy:

Terminal
$
cargo install spl-token-cli

Tìm thêm ví dụ trong tài liệu spl-token.

Địa chỉ tài khoản được hiển thị trong đầu ra terminal của bạn khác với các ví dụ bên dưới. Sử dụng địa chỉ từ terminal Playground của bạn khi làm theo. Ví dụ, lệnh create-token xuất ra địa chỉ mint account với ví Playground của bạn làm mint authority.

Tạo token mới

Để tạo một token mới (mint account), chạy lệnh:

Terminal
$
spl-token create-token

Kết quả trông như sau:

Terminal Output
Creating token 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Address: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Decimals: 9
Signature: 44fvKfT1ezBUwdzrCys3fvCdFxbLMnNvBstds76QZyE6cXag5NupBprSXwxPTzzjrC3cA6nvUZaLFTvmcKyzxrm1

Một mint account mới bắt đầu với nguồn cung bằng không. Kiểm tra nguồn cung hiện tại bằng lệnh:

Terminal
$
spl-token supply <TOKEN_ADDRESS>

Lệnh supply cho một token mới trả về 0:

Example
spl-token supply 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg

Tạo một Mint Account mới yêu cầu một giao dịch với hai chỉ thị. Đây là một ví dụ Javascript trên Solana Playground.

  1. System Program tạo một tài khoản mới với không gian cho dữ liệu Mint Account và chuyển quyền sở hữu cho Token Program.

  2. Token Program khởi tạo dữ liệu của tài khoản mới như một Mint Account

Tạo token account

Để giữ các token của một mint cụ thể, hãy tạo một token account:

Terminal
$
spl-token create-account <TOKEN_ADDRESS>

Ví dụ lệnh:

Example
spl-token create-account 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg

Kết quả:

Terminal Output
Creating account AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9
Signature: 2BtrynuCLX9CNofFiaw6Yzbx6hit66pup9Sk7aFjwU2NEbFz7NCHD9w9sWhrCfEd73XveAGK1DxFpJoQZPXU9tS1

Lệnh create-account tạo một associated token account với địa chỉ ví của bạn làm chủ sở hữu.

Để tạo một token account với chủ sở hữu khác:

Terminal
$
spl-token create-account --owner <OWNER_ADDRESS> <TOKEN_ADDRESS>

Lưu ý: <TOKEN_ADDRESS> chỉ định mint account cho token account.

Ví dụ lệnh:

Example
spl-token create-account --owner 2i3KvjDCZWxBsqcxBHpdEaZYQwQSYE6LXUMx5VjY5XrR 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg

Kết quả:

Terminal Output
Creating account Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Signature: 44vqKdfzspT592REDPY4goaRJH3uJ3Ce13G4BCuUHg35dVUbHuGTHvqn4ZjYF9BGe9QrjMfe9GmuLkQhSZCBQuEt

Việc tạo một associated token account yêu cầu một lệnh gọi Associated Token Program. Đây là ví dụ Javascript trên Solana Playground.

Associated Token Program sử dụng Cross Program Invocations để:

Để tạo một token account mới với một keypair mới thay vì địa chỉ associated token account, gửi một giao dịch với hai lệnh. Đây là ví dụ Javascript trên Solana Playground.

  1. System Program tạo một tài khoản mới với không gian cho dữ liệu token account và chuyển quyền sở hữu cho Token Program.

  2. Token Program khởi tạo dữ liệu dưới dạng token account

Mint token

Để tạo các đơn vị mới của một token, mint token vào một token account:

Terminal
$
spl-token mint [OPTIONS] <TOKEN_ADDRESS> <TOKEN_AMOUNT> [--] [RECIPIENT_TOKEN_ACCOUNT_ADDRESS]

Lệnh ví dụ:

Example
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100

Kết quả:

Terminal Output
Minting 100 tokens
Token: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Recipient: AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9
Signature: 2NJ1m7qCraPSBAVxbr2ssmWZmBU9Jc8pDtJAnyZsZJRcaYCYMqq1oRY1gqA4ddQno3g3xcnny5fzr1dvsnFKMEqG

Để mint token vào một token account khác:

Example
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 -- Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt

Kết quả:

Terminal Output
Minting 100 tokens
Token: 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg
Recipient: Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Signature: 3SQvNM3o9DsTiLwcEkSPT1Edr14RgE2wC54TEjonEP2swyVCp2jPWYWdD6RwXUGpvDNUkKWzVBZVFShn5yntxVd7

Lệnh MintTo trên Token Program tạo ra các token mới. Mint authority phải ký giao dịch. Lệnh này mint token vào một token account và tăng tổng cung trên Mint Account. Đây là ví dụ Javascript trên Solana Playground.

Chuyển token

Để chuyển token giữa các token account:

Terminal
spl-token transfer [OPTIONS] <TOKEN_ADDRESS> <TOKEN_AMOUNT> <RECIPIENT_ADDRESS or RECIPIENT_TOKEN_ACCOUNT_ADDRESS>

Lệnh ví dụ:

Example
spl-token transfer 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt

Kết quả:

Terminal Output
Transfer 100 tokens
Sender: AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9
Recipient: Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Signature: 5y6HVwV8V2hHGLTVmTmdySRiEUCZnWmkasAvJ7J6m7JR46obbGKCBqUFgLpZu5zQGwM4Xy6GZ4M5LKd1h6Padx3o

Lệnh Transfer trên Token Program xử lý việc chuyển token. Chủ sở hữu của token account người gửi phải ký giao dịch. Lệnh này di chuyển token giữa các token account. Đây là ví dụ Javascript trên Solana Playground.

Cả người gửi và người nhận đều cần token account cho token cụ thể (mint). Người gửi có thể bao gồm các lệnh để tạo token account của người nhận trong cùng một giao dịch.

Tạo metadata cho token

Token Extensions Program cho phép bạn lưu trữ metadata (tên, ký hiệu, liên kết hình ảnh) trực tiếp trên mint account.

Để tạo token với metadata extension:

Example
spl-token create-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb --enable-metadata

Kết quả:

Terminal Output
Creating token BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczP under program TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
To initialize metadata inside the mint, please run `spl-token initialize-metadata BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczP <YOUR_TOKEN_NAME> <YOUR_TOKEN_SYMBOL> <YOUR_TOKEN_URI>`, and sign with the mint authority.
Address: BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczP
Decimals: 9
Signature: 5iQofFeXdYhMi9uTzZghcq8stAaa6CY6saUwcdnELST13eNSifiuLbvR5DnRt311frkCTUh5oecj8YEvZSB3wfai

Để khởi tạo metadata:

Terminal
spl-token initialize-metadata <TOKEN_MINT_ADDRESS> <YOUR_TOKEN_NAME> <YOUR_TOKEN_SYMBOL> <YOUR_TOKEN_URI>

URI của token liên kết đến metadata ngoài chuỗi. Xem ví dụ định dạng JSON tại đây.

Lệnh ví dụ:

Example
spl-token initialize-metadata BdhzpzhTD1MFqBiwNdrRy4jFo2FHFufw3n9e8sVjJczP "TokenName" "TokenSymbol" "https://raw.githubusercontent.com/solana-developers/opos-asset/main/assets/DeveloperPortal/metadata.json"

Xem metadata trên Solana Explorer.

Tìm hiểu thêm trong Hướng dẫn Metadata Extension. Để biết chi tiết về Token Extensions, xem Hướng dẫn Bắt đầu về Token Extensions và tài liệu SPL.

Is this page helpful?

Mục lục

Chỉnh sửa trang

Quản lý bởi

© 2026 Solana Foundation.
Đã đăng ký bản quyền.
Kết nối