Семь концепций составляют основу разработки на Solana. Начните с аккаунтов и программ, затем разберитесь, как инструкции формируют транзакции. PDAs, CPIs и комиссии строятся на этой модели исполнения.
Аккаунты
Solana хранит всё состояние в аккаунтах — хранилище ключ-значение с 32-байтными адресами. Каждый аккаунт имеет пять полей: lamports, data, owner, executable и rent_epoch.
Программы
Смарт-контракты Solana, скомпилированные в sBPF. Программы не имеют состояния, а всё изменяемое состояние хранится в отдельных аккаунтах данных, передаваемых через инструкции.
Инструкции
Запрос на выполнение одной программы, содержащий идентификатор программы, список аккаунтов и байты данных. Несколько инструкций объединяются в одну транзакцию.
Транзакции
Атомарная единица исполнения в Solana. Содержит подписи и сообщение (адреса аккаунтов, хеш последнего блока и скомпилированные инструкции). Максимум 1232 байта, или 4096 в формате v1.
Комиссии
Базовая комиссия — 5000 lamports за подпись, плюс опциональная комиссия за приоритет на основе запрошенных вычислительных единиц. Максимум 1,4 млн вычислительных единиц на транзакцию.
Program Derived Addresses (PDAs)
Детерминированные адреса, производные от идентификатора программы и сидов. Только программа-владелец может подписывать от имени PDA через invoke_signed.
Cross-Program Invocations (CPIs)
Вызов одной программой другой через invoke или invoke_signed. Привилегии подписанта и разрешения на запись передаются вызываемой программе. Максимальная глубина стека инструкций — 5 (верхний уровень плюс CPIs).
Дополнительные темы
Ассеты
Взаимозаменяемые и невзаимозаменяемые цифровые ассеты на Solana (SPL Token, Token-2022).
Кластеры и эндпоинты
Mainnet, Devnet и Testnet: группы validator, обрабатывающие JSON-RPC запросы.
| Кластер | Публичный RPC-эндпоинт | Назначение |
|---|---|---|
| Mainnet | https://api.mainnet.solana.com | Продакшн |
| Devnet | https://api.devnet.solana.com | Эксперименты разработчиков |
| Testnet | https://api.testnet.solana.com | Тестирование validator |
Is this page helpful?