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).
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 Program (Oryginalny)
- Podstawowe możliwości tokenów (mint, transfer itd.)
- Niezmienny i szeroko używany
Token Extension Program (Token 2022)
- Zawiera wszystkie funkcje oryginalnego Token Programu
- Dodaje funkcje poprzez "rozszerzenia"
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 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 mint
Pełne dane przechowywane na każdym koncie mint obejmują następujące informacje:
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 initializedpub 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 tokena
Pełne dane przechowywane na każdym koncie tokena obejmują następujące informacje:
pub struct Account {/// The mint associated with this accountpub 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 delegatepub delegate: COption<Pubkey>,/// The account's statepub 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 delegatedpub 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 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 tokenowe
Pamiętaj, że każdy portfel potrzebuje własnego konta tokenowego, aby przechowywać tokeny z tego samego mintu.
Rozszerzone relacje kont
Is this page helpful?