Zasoby na Solanie

Tokeny to cyfrowe aktywa reprezentujące własność różnych kategorii dóbr. Tokenizacja umożliwia cyfryzację praw własności. Tokeny na Solanie nazywane są tokenami SPL (Solana Program Library).

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

Ta sekcja omawia podstawowe pojęcia dotyczące reprezentacji tokenów na Solanie. Zobacz sekcję Podstawy tokenów SPL po przykłady kodu.

Kluczowe informacje

  • Token Programs zawierają całą logikę instrukcji do interakcji z tokenami w sieci (zarówno zamiennymi, jak i niezamiennymi).

  • Mint Account reprezentuje konkretny token i przechowuje globalne metadane o tokenie, takie jak całkowita podaż i autorytet mint (adres uprawniony do tworzenia nowych jednostek tokena).

  • Token Account śledzi indywidualną własność tokenów dla konkretnego mint account i właściciela.

  • Associated Token Account to Token Account utworzony z adresem pochodzącym od adresów właściciela i mint account.

Token Programy

Ekosystem Solany posiada dwa główne Token Programy. Poniżej znajduje się kod źródłowy obu programów.

Token Programs zawiera całą logikę instrukcji służącą do interakcji z tokenami w sieci (zarówno zamiennymi, jak i niezamiennymi). Wszystkie tokeny na Solanie są w istocie kontami danych będącymi własnością Token Program.

Token ProgramToken Program

Mint Account

Tokeny na Solanie są jednoznacznie identyfikowane przez adres Mint Account należący do Token Programu. To konto działa jako globalny licznik dla danego tokena i przechowuje takie dane jak:

  • Supply: Całkowita podaż tokena
  • Decimals: Precyzja dziesiętna tokena
  • Mint authority: Konto uprawnione do tworzenia nowych jednostek tokena, zwiększając podaż
  • Freeze authority: Konto uprawnione do zamrażania tokenów na Token Account, uniemożliwiając ich transfer lub spalanie

Uprawnienie do mintowania (mint authority) jest konfigurowane podczas inicjalizacji minta. Autoryzuje ono przyszłe mintowanie, jednak konto posiadające to uprawnienie nie musi być tym samym kontem, które utworzyło mint account lub pokryło koszty jego utworzenia.

Konto mintKonto mint

Pełne dane przechowywane na każdym koncie mint obejmują następujące informacje:

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>,
}

Dla odniesienia, oto link do Solana Explorer z USDC Mint Account.

Konto tokena

Token Program tworzy Token Accounts, aby śledzić indywidualną własność każdej jednostki tokena. Token Account przechowuje dane takie jak:

  • Mint: Token, którego jednostki przechowuje Token Account
  • Owner: Konto uprawnione do transferu tokenów z Token Account
  • Amount: Liczba tokenów aktualnie przechowywanych na Token Account

Konto tokenaKonto tokena

Pełne dane przechowywane na każdym koncie tokena obejmują następujące informacje:

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>,
}

Portfel potrzebuje osobnego konta tokena dla każdego tokena (mint), który chce przechowywać, z adresem portfela ustawionym jako właściciel konta tokena. Każdy portfel może posiadać wiele kont tokena dla tego samego tokena (mint), ale konto tokena może mieć tylko jednego właściciela i przechowywać jednostki tylko jednego tokena (mint).

Relacja kontRelacja kont

Zauważ, że dane każdego token account zawierają pole owner wskazujące, kto posiada uprawnienia do tego token account. Różni się to od właściciela programu określonego w bazowym typie Account, którym jest Token Program dla wszystkich token accounts.

Powiązane konto tokena

Powiązane konta tokenowe upraszczają proces znajdowania adresu konta tokenowego dla konkretnego mintu i właściciela. Możesz traktować powiązane konto tokenowe jako „domyślne” konto tokenowe dla danego mintu i właściciela.

Powiązane konto tokenowe jest tworzone z adresem wyprowadzonym z adresu właściciela i adresu konta mint. Ważne jest, aby zrozumieć, że powiązane konto tokenowe to po prostu konto tokenowe o określonym adresie.

To wprowadza kluczowe pojęcie w programowaniu na Solanie: Program Derived Address (PDA). PDA wyprowadza adres deterministycznie na podstawie zdefiniowanych danych wejściowych, co ułatwia znalezienie adresu konta.

Powiązane konto tokenowePowiązane konto tokenowe

Pamiętaj, że każdy portfel potrzebuje własnego konta tokenowego, aby przechowywać tokeny z tego samego mintu.

Rozszerzone relacje kontRozszerzone relacje kont

Is this page helpful?

Spis treści

Edytuj stronę