Ця інструкція проведе вас через створення, відправку та перевірку першої транзакції в мережі Solana Devnet за допомогою офіційного CLI. Ви отримаєте тестові токени, перекажете їх на іншу адресу та переконаєтесь, що транзакція дійсно підтверджена.

Середовище: macOS або Linux (x86_64/aarch64), термінал з доступом до інтернету.
Передумови: встановлений Solana CLI (перевірте актуальну стабільну версію на офіційному репозиторії проєкту), базове знання терміналу.
Кластер: Devnet (тестова мережа, токени не мають реальної вартості).
Очікуваний результат: підтверджена транзакція переказу SOL, видимість у блокчейн-експлорері.

Підготовка

Перевірка підключення до Devnet

Перед будь-якими діями переконайтеся, що CLI встановлено коректно і може зв'язатися з кластером Devnet. Виконайте:

solana cluster-version --url devnet

Очікуваний результат — рядок із версією кластера, наприклад 1.18.x (точне значення залежить від поточного стану Devnet, перевірте актуальну версію на репозиторії Solana). Якщо замість версії ви бачите помилку з'єднання, перевірте підключення до інтернету або спробуйте змінити RPC-endpoint на альтернативний публічний ноду Devnet.

Також переконайтеся, що у вас є ключова пара. Якщо ви ще не генерували гаманець, створіть його:

solana-keygen new

Ця команда згенерує нову ключову пару та збереже її у стандартну директорію (~/.config/solana/id.json). Зверніть увагу: цей файл містить приватний ключ. У реальному застосунку він ніколи не повинен потрапляти в публічний доступ. Для Devnet це прийнятно, але формуйте звичку працювати з ключами обережно вже зараз.

Перевірте адресу свого гаманця:

solana address

Запишіть цей рядок — це ваша відправна адреса для подальших кроків.

Отримання тестових SOL через airdrop

Для оплати комісії транзакції вам потрібен тестовий SOL. На Devnet його можна отримати безкоштовно через airdrop:

solana airdrop 2 --url devnet

Параметр 2 — кількість SOL. На Devnet ліміт одного airdrop зазвичай становить 2 SOL, але цей ліміт може змінюватися; якщо запит не проходить, спробуйте менше значення (наприклад, 1).

Перевірте баланс:

solana balance --url devnet

Очікуваний вивід — число з одиницею SOL, наприклад 2 SOL. Якщо баланс нульовий, airdrop не виконався — повторіть спробу або перевірте статус Devnet (іноді кластер перевантажений і airdrop тимчасово недоступний).

Створення транзакції через CLI

solana transfer — команди та параметри

Команда solana transfer створює транзакцію переказу SOL з вашого гаманця на вказану адресу. Базовий синтаксис:

solana transfer <RECIPIENT_ADDRESS> <AMOUNT> --url devnet

Ключові параметри:

  • RECIPIENT_ADDRESS — публічний ключ (base58) отримувача, від 32 до 44 символів;
  • AMOUNT — сума переказу в SOL (дробові значення вказуються через крапку, наприклад 0.01);
  • --url devnet — явне вказування кластера (якщо не вказати, CLI використає кластер за замовчуванням, зазвичай mainnet-beta, що призведе до помилки, оскільки у вас немає реального SOL).

Додаткові корисні параметри (необов'язкові для цього кроку, але корисні для розуміння):

  • --allow-unfunded-recipient — дозволяє відправити SOL на адресу, яка ще не існує в мережі (акаунт буде створено автоматично);
  • --fee-payer — шлях до файлу ключа, який сплачує комісію (за замовчуванням — ваш стандартний гаманець);
  • --dry-run — симулює транзакцію без реальної відправки, корисно для перевірки.

Вказування recipient, amount, --url devnet

Для тесту згенеруйте другу ключову пару, яка слугуватиме адресою отримувача:

solana-keygen new --outfile ~/.config/solana/recipient.json

Отримайте адресу отримувача:

solana address --keypair ~/.config/solana/recipient.json

Тепер створіть і відправте транзакцію. Вкажіть реальну адресу отримувача замість плейсхолдера:

solana transfer <АДРЕСА_ОТРИМУВАЧА> 0.1 --url devnet --allow-unfunded-recipient

Параметр --allow-unfunded-recipient тут потрібен, оскільки щойно створений акаунт ще не має запису в мережі (мінімальний баланс для існування акаунта — 0.00089088 SOL, він буде вирахуваний із суми переказу автоматично).

Концептуальне зауваження: у цій інструкції ми використовуємо CLI як єдиний інструмент, щоб ізолювати механіку транзакції від складнощів програмування. У реальному застосунку ви будете конструювати транзакцію програмно через бібліотеки (наприклад, @solana/web3.js для TypeScript), але логіка залишається ідентичною: вказати відправника, отримувача, суму, підписати та відправити.

Відправка та підтвердження

Очікування підтвердження (confirmation)

Після виконання команди solana transfer CLI автоматично чекає на підтвердження транзакції від кластера. За замовчуванням використовується стратегія finalized — це означає, що транзакція вважається підтвердженою лише після того, як її включено в блок, який має достатню кількість наступних блоків (supermajority stake). На Devnet це зазвичай займає кілька секунд.

Успішний вивід виглядає приблизно так:

Signature: 5UfX...3kQ9 (у реальному виводі CLI показує повний підпис транзакції у форматі base58)

Якщо ви бачите підпис — транзакцію прийнято кластером. Але наявність підпису ще не гарантує фінального підтвердження. Щоб переконатися остаточно, використайте окрему перевірку.

Перевірка статусу через solana confirm

Скопіюйте підпис із попереднього кроку та виконайте:

solana confirm 5UfX...3kQ9 --url devnet

Очікуваний результат:

Transaction signature 5UfX...3kQ9 is confirmed

Якщо замість цього ви бачите "not found" — транзакція ще не потрапила в мемпул або була відхилена. Якщо "Transaction failed" — транзакція була включена в блок, але виконання завершилося помилкою (для простого переказу SOL це малоймовірно, але можливо при недостатньому балансі).

Також можна перевірити баланс отримувача, щоб підтвердити, що кошти надійшли:

solana balance --keypair ~/.config/solana/recipient.json --url devnet

Очікуване значення — трохи менше за 0.1 SOL (різниця піде на створення акаунта отримувача).

Аналіз результату

Що показує вивід CLI

Розберемо типовий успішний вивід команди solana transfer детальніше:

Поле виводу Що означає
Signature Унікальний ідентифікатор транзакції (base58, 88 символів). Це єдиний спосіб однозначно ідентифікувати транзакцію в мережі.
Blockhash (якщо виведено) Хеш останнього блоку на момент створення транзакції. Транзакція життєздатна лише доти, доки цей blockhash є актуальним (зазвичай близько 60–90 секунд).

CLI не показує детальний розбір комісій у базовому режимі. Для цього потрібен аналіз через Explorer або програмний запит до RPC.

Як знайти транзакцію в Explorer

Відкрийте Solana Block Explorer для Devnet. Адреса експлорера для Devnet: explorer.solana.com/?cluster=devnet. У рядок пошуку вставте повний підпис транзакції (88 символів).

У картці транзакції ви побачите:

  • Status — Completed (успішне виконання) або Failed;
  • Fee — фактична сплачена комісія в lamports (1 SOL = 1 000 000 000 lamports);
  • Account Changes — зміни балансів для кожного акаунта, залученого в транзакцію (відправник, отримувач, fee-payer);
  • Block — номер слоту (slot), в який включено транзакцію;
  • Timestamp — час включення.

Зверніть увагу на розділ Balance Changes: ви побачите, що відправник втратив суму переказу плюс комісію, а отримувач отримав суму мінус витрати на створення акаунта (якщо акаунт був новим). Ця прозорість — ключова перевага публічного блокчейну.

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

Insufficient funds for transaction

Повне повідомлення: "Transaction simulation failed: Insufficient funds for transaction".

Причина: на балансі вашого акаунта недостатньо SOL для оплати суми переказу та комісії транзакції. Комісія за простий переказ SOL зазвичай становить 0.000005 SOL (5000 lamports), але до неї може додаватися мінімальний баланс для створення акаунта отримувача, якщо він новий.

Рішення: перевірте баланс (solana balance --url devnet) і переконайтеся, що він перевищує суму переказу хоча б на 0.001 SOL (з запасом). За потреби виконайте додатковий airdrop.

Частий нюанс: якщо ви переказуєте майже весь баланс, не забувайте про комісію. Наприклад, при балансі 2 SOL спроба переказати рівно 2 SOL завершиться помилкою — залиште мінімальний запас.

Transaction not confirmed (timeout)

Повне повідомлення: "Transaction not confirmed within timeout" або "Error: Transaction was not confirmed in 30.00 seconds".

Причина: транзакція була відправлена в мережу, але кластер не підтвердив її протягом таймауту (за замовчуванням 30 секунд). На Devnet це трапляється частіше, ніж на mainnet-beta, через меншу кількість валідаторів та вище навантаження.

Можливі сценарії та дії:

  • Транзакція все-таки підтверджена, але з затримкою. Скопіюйте підпис і перевірте через solana confirm <SIGNATURE> --url devnet або в Explorer. Якщо підтверджена — нічого робити не треба.
  • Транзакція відхилена кластером. Перевірте підпис у Explorer: якщо статус Failed, читайте деталі помилки там.
  • Транзакція загублена. Якщо Explorer не знаходить підпис взагалі, транзакція не потрапила в мемпул. Повторіть відправку з тим самим blockhash (якщо він ще актуальний) або створіть нову транзакцію.

Важливе зауваження: у цій інструкції ми не розглядаємо механізми повторної відправки (durable nonce, compute budget для пріоритезації) — вони належать до теми production-розробки та діагностики. Для першої транзакції на Devnet достатньо просто повторити команду.

Профілактика: перед відправкою переконайтеся, що Devnet працює стабільно (перевірте через solana cluster-version --url devnet). Якщо кластер не відповідає, зачекайте кілька хвилин і спробуйте знову.

Джерела