Визначення

Account (рахунок) у Solana — це базова одиниця зберігання даних у блокчейні. Кожен рахунок містить три обов'язкові поля: баланс у lamports (дрібна одиница SOL), довільні дані (байти) та посилання на програму-власника, яка має виключне право змінювати ці дані. На відміну від багатьох інших блокчейнів, у Solana смарт-контракти, стейт програм, токенові записи та гаманці користувачів — усе це рахунки з однаковою внутрішньою структурою.

Як працює

Кожен рахунок ідентифікується публічним ключем і має фіксований розмір, який виділяється під час створення. Цей розмір не можна змінити пізніше — щоб збільшити його, доводиться створювати новий рахунок і копіювати туди дані.

Ключові механізми:

  • Власник (owner). Програма, чий публічний ключ записаний у поле owner. Тільки вона може змінювати дані рахунку. Перенести власність на іншу програму неможливо — можна лише закрити рахунок і створити новий.
  • Виконуваний прапорець (executable). Якщо встановлено, рахунок містить скомпільований код програми (BPF) і може обробляти інструкції. Інакше — це рахунок із даними.
  • Оренда (rent). Зберігання даних на блокчейні коштує lamports. Якщо баланс рахунку падає нижче порогу exempt-мінімуму, система періодично списує оренду й зрештою видаляє рахунок. Щоб цього уникнути, достатньо один раз депонувати суму, що робить рахунок звільненим від оренди (rent-exempt) назавжди.
  • Права доступу в транзакції. Кожна транзакція явно вказує, які рахунки є доступними для читання, а які — для запису. Рахунок, не переданий у транзакцію, програма взагалі не зможе прочитати.

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

Приклад

Користувач створює гаманець — це рахунок, власником якого є System Program. Баланс: 5 SOL, дані: порожні, executable: false. Цей рахунок може лише отримувати й відправляти lamports.

Той самий користувач взаємодіє з децентралізованою біржею. Програма біржі створює PDA-рахунок для зберігання стану пулу ліквідності: баланс — 0.001 SOL (rent-exempt), дані — серіалізована структура з резервами токенів і кривою, власник — програма біржі. Тільки ця програма може оновлювати резерви в даних рахунку.

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

Ототожнювати рахунок Solana з гаманцем. Гаманець — це лише один із різновидів рахунка (той, що належить System Program і зазвичай не містить даних). Більшість рахунків у мережі — це стейт програм, токенові акаунти, PDA та інші структури, які не є гаманцями й не можуть самостійно підписувати транзакції.

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

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

  • SOL (токен) — одиниця оплати оренди та комісій за рахунки
  • Transaction (транзакція) — як рахунки передаються й змінюються в межах однієї транзакції

Додаткові ресурси

  • Офіційна документація Solana: розділ Accounts у Solana Docs — детальний опис полів, моделі власності та життєвого циклу рахунка