Токени на Solana

Токени — це цифрові активи, що представляють право власності на різні категорії активів. Токенізація дозволяє оцифрувати права власності. Токени на Solana називаються SPL (Solana Program Library) токенами.

Цей розділ охоплює базові концепції того, як токени представлені на Solana. Зверніться до розділу SPL Token Basics для прикладів коду.

Ключові моменти

  • Token Programs містять всю логіку інструкцій для взаємодії з токенами в мережі (як взаємозамінними, так і невзаємозамінними).

  • Mint Account представляє конкретний токен і зберігає глобальні метадані про токен, такі як загальна пропозиція та mint authority (адреса, уповноважена створювати нові одиниці токена).

  • Token Account відстежує індивідуальне володіння токенами для конкретного mint account для конкретного власника.

  • Associated Token Account — це token account, створений з адресою, похідною від адрес власника та mint account.

Token Programs

Екосистема Solana має дві основні Token Programs. Вихідний код обох програм нижче.

Token Program містить всю логіку інструкцій для взаємодії з токенами в мережі (як взаємозамінними, так і невзаємозамінними). Всі токени на Solana фактично є data accounts, що належать Token Program.

Token ProgramToken Program

Mint Account

Токени на Solana унікально ідентифікуються адресою Mint Account, який належить Token Program. Цей акаунт діє як глобальний лічильник для конкретного токена і зберігає такі дані:

  • Supply: Загальна пропозиція токена
  • Decimals: Десяткова точність токена
  • Mint authority: Акаунт, уповноважений створювати нові одиниці токена, збільшуючи пропозицію
  • Freeze authority: Акаунт, уповноважений заморожувати токени в Token Account, запобігаючи їх передачі або спаленню

Mint AccountMint Account

Повні деталі, що зберігаються в кожному mint account, включають наступне:

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

Для довідки, ось посилання Solana Explorer на USDC Mint Account.

Token Account

Token Program створює token accounts для відстеження індивідуального володіння кожною одиницею токена. Token account зберігає такі дані:

  • Mint: Токен, одиниці якого зберігає token account
  • Owner: Акаунт, уповноважений передавати токени з token account
  • Amount: Кількість токенів, які наразі зберігає token account

Token AccountToken Account

Повні деталі, що зберігаються в кожному token account, включають наступне:

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

Гаманцю потрібен token account для кожного токена (mint), який він хоче зберігати, з адресою гаманця, встановленою як власник token account. Кожен гаманець може володіти кількома token accounts для одного й того ж токена (mint), але token account може мати лише одного власника і зберігати одиниці одного токена (mint).

Account RelationshipAccount Relationship

Зверніть увагу, що дані кожного token account включають поле owner, яке визначає, хто має повноваження над token account. Це відрізняється від власника програми, вказаного в базовому типі Account, яким для всіх token accounts є Token Program.

Associated Token Account

Associated Token Account спрощують процес пошуку адреси token account для конкретного mint і власника. Розглядайте associated token account як "стандартний" token account для конкретного mint і власника.

Associated token account створюється з адресою, похідною від адреси власника та адреси mint account. Важливо розуміти, що associated token account — це просто token account з конкретною адресою.

Це вводить ключову концепцію в розробці Solana: Program Derived Address (PDA). PDA виводить адресу детерміновано, використовуючи попередньо визначені вхідні дані, що полегшує пошук адреси облікового запису.

Associated Token AccountAssociated Token Account

Зверніть увагу, що кожному гаманцю потрібен власний token account для зберігання токенів з одного й того ж mint.

Розширені відносини між обліковими записамиРозширені відносини між обліковими записами

Приклади Token CLI

CLI spl-token допомагає експериментувати з SPL-токенами. Наведені нижче приклади використовують термінал Solana Playground для виконання команд CLI безпосередньо в браузері без локального встановлення.

Створення токенів та облікових записів вимагає SOL для депозитів rent та комісій за транзакції. Для користувачів Solana Playground вперше створіть гаманець Playground і виконайте команду solana airdrop у терміналі Playground. Ви також можете отримати devnet SOL з публічного веб-крана.

Terminal
$
solana airdrop 2

Виконайте spl-token --help, щоб побачити всі доступні команди.

Terminal
$
spl-token --help

Щоб встановити CLI spl-token локально, виконайте:

Terminal
$
cargo install spl-token-cli

Більше прикладів можна знайти в документації spl-token.

Адреси облікових записів, показані у вашому виводі терміналу, відрізняються від прикладів нижче. Використовуйте адреси з вашого терміналу Playground, слідуючи інструкціям. Наприклад, команда create-token виводить адресу mint account з вашим гаманцем Playground як mint authority.

Створення нового токена

Щоб створити новий токен (mint account), виконайте:

Terminal
$
spl-token create-token

Результат виглядає так:

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

Новий mint account починається з нульовою пропозицією. Перевірте поточну пропозицію за допомогою:

Terminal
$
spl-token supply <TOKEN_ADDRESS>

Команда supply для нового токена повертає 0:

Example
spl-token supply 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg

Створення нового Mint Account вимагає транзакції з двома інструкціями. Ось приклад на Javascript у Solana Playground.

  1. System Program створює новий акаунт з простором для даних Mint Account і передає право власності Token Program.

  2. Token Program ініціалізує дані нового акаунта як Mint Account

Створення token account

Щоб зберігати токени певного mint, створіть token account:

Terminal
$
spl-token create-account <TOKEN_ADDRESS>

Приклад команди:

Example
spl-token create-account 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg

Результат:

Terminal Output
Creating account AfB7uwBEsGtrrBqPTVqEgzWed5XdYfM1psPNLmf7EeX9
Signature: 2BtrynuCLX9CNofFiaw6Yzbx6hit66pup9Sk7aFjwU2NEbFz7NCHD9w9sWhrCfEd73XveAGK1DxFpJoQZPXU9tS1

Команда create-account створює associated token account з адресою вашого гаманця як власника.

Щоб створити token account з іншим власником:

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

Примітка: <TOKEN_ADDRESS> вказує mint account для token account.

Приклад команди:

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

Результат:

Terminal Output
Creating account Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt
Signature: 44vqKdfzspT592REDPY4goaRJH3uJ3Ce13G4BCuUHg35dVUbHuGTHvqn4ZjYF9BGe9QrjMfe9GmuLkQhSZCBQuEt

Створення associated token account вимагає однієї інструкції, яка викликає Associated Token Program. Ось приклад на Javascript у Solana Playground.

Associated Token Program використовує міжпрограмні виклики для:

Щоб створити новий token account з новим keypair замість адреси associated token account, надішліть транзакцію з двома інструкціями. Ось приклад на Javascript у Solana Playground.

  1. System Program створює новий акаунт з місцем для даних token account і передає право власності Token Program.

  2. Token Program ініціалізує дані як token account

Карбування токенів

Щоб створити нові одиниці токена, виконайте карбування токенів на token account:

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

Приклад команди:

Example
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100

Результат:

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

Щоб виконати карбування токенів на інший token account:

Example
spl-token mint 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 -- Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt

Результат:

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

Інструкція MintTo у Token Program створює нові токени. Mint authority повинен підписати транзакцію. Інструкція карбує токени на token account і збільшує загальну пропозицію на mint account. Ось приклад на Javascript у Solana Playground.

Переказ токенів

Щоб перевести токени між token accounts:

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

Приклад команди:

Example
spl-token transfer 99zqUzQGohamfYxyo8ykTEbi91iom3CLmwCA75FK5zTg 100 Hmyk3FSw4cfsuAes7sanp2oxSkE9ivaH6pMzDzbacqmt

Результат:

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

Інструкція Transfer у Token Program обробляє переказ токенів. Власник Token Account відправника повинен підписати транзакцію. Інструкція переміщує токени між Token Account. Ось приклад на Javascript у Solana Playground.

І відправник, і одержувач потребують token account для конкретного токена (mint). Відправник може включити інструкції для створення token account одержувача в тій самій транзакції.

Створення метаданих токена

Token Extensions Program дозволяє зберігати метадані (назва, символ, посилання на зображення) безпосередньо в Mint Account.

Щоб створити токен з розширенням метаданих:

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

Результат:

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

Щоб ініціалізувати метадані:

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

URI токена посилається на метадані поза мережею. Дивіться приклад формату JSON тут.

Приклад команди:

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

Переглянути метадані можна в Solana Explorer.

Дізнайтеся більше в посібнику з розширення Metadata. Для деталей про Token Extensions дивіться посібник для початківців та документацію SPL.

Is this page helpful?

Керується

© 2026 Фонд Solana.
Всі права захищені.
Залишайтеся на зв'язку