Визначення

Associated Token Account (ATA) — це програмно визначений токен-рахунок у мережі Solana, адреса якого однозначно залежить від двох параметрів: адреси власника та адреси токена (mint). Для кожної пари «власник — токен» існує рівно один ATA, що усуває плутанину з кількома рахунками для одного й того ж активу.

ATA створюється і керується програмою SPL Associated Token Account і є різновидом PDA (Program Derived Address) — адреси, яку детерміновано обчислює програма, а не генерує випадковим чином.

Як працює

На Solana кожен токен (наприклад, USDC, NFT) зберігається не на гаманці користувача безпосередньо, а на окремому рахунку — token account. До появи стандарту ATA користувачеві доводилося самостійно створювати такі рахунки, зберігати їхні адреси та вказувати правильний рахунок під час кожної транзакції. Це призводило до помилок і втрати коштів.

ATA вирішує проблему так:

  • Адреса ATA обчислюється за фіксованою формулою з трьох входів: публічний ключ власника, адреса mint та ідентифікатор програми Associated Token Account.
  • Будь-хто може визначити ATA іншого користувача для будь-якого токена, не запитуючи цю адресу безпосередньо.
  • Якщо ATA ще не існує, його можна створити в тій самій транзакції, що й переказ — за умови, що відправник сплачує комісію за створення рахунку (оренду простору).
  • Закрити ATA можна лише тоді, коли баланс токенів на ньому дорівнює нулю. Орендовані lamports повертаються власнику.

Приклад

Ви хочете надіслати 10 USDC користувачеві з адресою 7xK...3mP. На Solana неможливо просто відправити токени на цю адресу, як це працює в Ethereum. Потрібно знати адресу саме USDC-рахунку цього користувача.

Завдяки ATA вам не треба питати його про цю адресу. Ваш гаманець обчислює ATA для пари (7xK...3mP, адреса mint USDC) і відправляє токени туди. Якщо в отримувача ще немає ATA для USDC, гаманець автоматично створить його в тій самій транзакції, сплативши оренду.

Типова помилка

Найпоширеніша помилка — спроба відправити токени (SPL) безпосередньо на системний адрес гаманця отримувача, минаючи ATA. Транзакція або відхилиться, або токени потраплять на рахунок, до якого отримувач не зможе отримати доступ через стандартні інтерфейси гаманців. Завжди переказуйте токени на ATA отримувача, а не на його базову адресу.

Пов'язані матеріали

Внутрішні переходи

  • Mint — що таке адреса токена і як вона пов'язана з ATA
  • Liquidity pool — як ATA використовуються в пулах ліквідності DeFi