Tài sản 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.

The Token Program updates a mint and its token accounts while owners authorize balance changes

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 các token trên mạng (cả fungible lẫn 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 Programs chứa toàn bộ logic lệnh để tương tác với các token trên mạng (cả fungible lẫn non-fungible). Tất cả token trên Solana về cơ bản đều là data account thuộc sở hữu của một 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 authority được cấu hình khi mint được khởi tạo. Nó cho phép thực hiện việc mint trong tương lai, nhưng không nhất thiết phải là account đã tạo hoặc thanh toán cho mint account.

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 kiểm soát Token Account đó. Điều này khác với program owner được chỉ định trong kiểu Account cơ sở, vốn là Token Program đối với tất cả cá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

Is this page helpful?

Mục lục

Chỉnh sửa trang