Особливість смарт контрактів solana в тому, що вони stateless, це означає що вони не можуть змінити свій стан. Іменно тому смарт контракти в мережі solana називають програмами. Програми для Solana пишуть на мові програмування Rust.
Акаунт
Акаунт - це основна одиниця в мережі solana. Існує кілька видів акаунтів, а саме:
- Виконуваний - Це і є програма
- Тільки для читання - Може використоуватись одночасно кількома програмами.
- Змінний - Використовуєтся для зберігання даних.
Це структура інформації про акаунт:
pub struct AccountInfo<'a> {
pub Key: &'a Pubkey,
pub is_signer: bool,
pub is_writable: bool,
pub lamports: Rc<RefCell<&'a mut u64>>,
pub data: Rc<RefCell<&'a mut [u8]>>,
pub owner: &'a Pubkey,
pub executable: bool,
pub rent_epoch: Epoch,
}
Виконуваний
Вид акаунт визначаєтся цими двома параметрами:
- is_writable
- executable
Нескладно догадатись, що якщо виставити executable в true, то акаунт стане програмою, і зможе виконувати код.
Спочатку новий акаунт належить програмі System program, вона може передати акаунт іншому власнику. Дані про власника програми записані в owner, там зберігаєтся публічний ключ власника.
Тільки для читання
Якщо поставити параметр is_writable в false, то акаунт буде доступний тільки для читання. Такі акаунти вирішують завдання паралельної обробки транзакцій. Так як цей акаунт не можна змінити можна бути впевненим, що дані які в ньому зберігаются вірні.
Змінний
Роль цього акаунта - зберігання даних. Акаунт цього виду може володіти іншими акаунтами. Для можливості змінювати інформацію, яка зберігаєтся в акаунті парамтер is_writable потрібно поставити в true.
Утримання акаунта
Акаунти - не безплатні, і якщо ви не можете утримувати акаунт - то його просто видаляють. Існує два способа утримання акаунта
Оренда акаунта
Раз в епоху з акаунта буде зніматись невелика кількість лампортів.
Забезпечення акаунта
Якщо баланс акаунта перевищить визначену суму, то акаунт не буде видалено в будь якому випадку.
Лампорт
1 lamport = 0.000000001 SOL