Активи на Solana

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

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

Цей розділ охоплює базові концепції того, як токени представлені на 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 Programs містять усю логіку інструкцій для взаємодії з токенами в мережі (як замінними, так і незамінними). Усі токени на Solana фактично є обліковими записами даних, якими володіє Token Program.

Token ProgramToken Program

Mint Account

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

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

Повноваження на карбування (mint authority) налаштовуються під час ініціалізації mint. Вони дозволяють подальше карбування, але обліковий запис, що має ці повноваження, не обов'язково є тим, хто створив або оплатив mint 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 account є 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.

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

Is this page helpful?

Зміст

Редагувати сторінку