Введение в Solana разработку (используя только ваш браузер)

Для этого руководства по быстрому запуску "hello world" мы будем использовать Solana Playground, браузерную IDE для разработки и развертывания нашей программы Solana. Чтобы использовать его, вам НЕ нужно устанавливать на компьютер какое-либо программное обеспечение на свой компьютер. Просто откройте Solana Playground в выбранном вами браузере, и вы готовы писать и развертывать программы Solana.

Чему вы научитесь #

  • как начать работу с Solana Playground
  • как создать кошелек в Solana Playground
  • как написать базовую программу Solana на Rust
  • как создать и установить свою программу Rust
  • как взаимодействовать с вашей онлайн-программой, используя JavaScript

Использование игровой площадки Solana #

Solana Playground — это браузерное приложение, которое позволит вам писать, создавать и развертывать программы Solana в блокчейне. Все из браузера . Установка не требуется.

Это отличный ресурс для разработчиков, позволяющий начать разработку Solana, особенно для Windows.

Импортировать наш пример проекта #

В новой вкладке в вашем браузере откройте наш пример "Hello World" проект на Playground

Затем импортируйте проект в локальную рабочую область, нажав на иконку "Import" и назвав проект hello_world.

Info

Если вы не импортируете программу в вашу Solana Playground, то не сможете вносить изменения в код. Но вы все равно сможете собрать и развернуть код на кластере Solana.

Создать Playground кошелек #

Обычно при локальной разработке вам необходимо создать файловый кошелек для использования с Solana CLI. Но в Solana Playground, вам нужно всего лишь нажать на несколько кнопок, чтобы создать кошелек на базе браузера.

Info

Ваш Playground Wallet будет сохранен в локальном хранилище вашего браузера. Очистка кэша вашего браузера удалит сохраненный кошелек. При создании нового кошелька у вас будет возможность сохранить локальную копию файла пары ключей вашего кошелька.

Нажмите красную кнопку индикатора состояния в левом нижнем углу экрана, (необязательно) сохраните файл пары ключей вашего кошелька на свой компьютер для резервного копирования, затем нажмите "Продолжить".

После того, как ваш Playground Wallet будет создан, вы заметите, что нижнее окно теперь указывает адрес вашего кошелька, ваш SOL баланс и кластер Solana, к которому вы подключены (Devnet обычно является по умолчанию и рекомендуется, но "localhost" test validator также является приемлемым).

Создание программы Solana #

Код программы Solana на основе Rust будет отображаться в вашем файле src/lib.rs. Внутри src/lib.rs вы сможете импортировать ваш ящик Rust и определить логику. Откройте файл src/lib.rs в Solana Playground.

Импорт контейнера solana_program #

В верхней части lib.rs, мы импортируем контейнер solana-program и переносим необходимые элементы в локальное пространство имен:

use solana_program::{
    account_info::AccountInfo,
    entrypoint,
    entrypoint::ProgramResult,
    pubkey::Pubkey,
    msg,
};

Напишите логику вашей программы #

Каждая программа Solana должна определить entrypoint, который рассказывает Solana время выполнения, где начать выполнение кода onchain. Точка входа вашей программы должна предоставлять публичную функцию с именем process_instruction:

// declare and export the program's entrypoint
entrypoint!(process_instruction);
 
// program entrypoint's implementation
pub fn process_instruction(
    program_id: &Pubkey,
    accounts: &[AccountInfo],
    instruction_data: &[u8]
) -> ProgramResult {
    // log a message to the blockchain
    msg!("Hello, world!");
 
    // gracefully exit the program
    Ok(())
}

Каждая программа в цепи должна вернуть Ok result enum со значением (). Это говорит среде выполнения Solana, что ваша программа выполнена успешно и без ошибок.

Приведенная выше программа просто Запишет сообщение "Hello, world!" в кластер блокчейна, а затем корректно завершит работу с помощью Ok(()).

Создайте вашу программу #

На левой боковой панели выберите вкладку "Build & Deploy". Далее нажмите кнопку "Build".

Если вы посмотрите на терминал Playground, вы увидите, что ваша программа Solana начинает компилироваться. После завершения, вы увидите сообщение об успехе.

Info

Вы можете получить предупреждение когда ваша программа скомпилирована из-за неиспользуемых переменных. Не волнуйтесь, это предупреждение не повлияет на вашу сборку. Они связаны с тем, что наша очень простая программа не использует все переменные, которые мы объявили в process_instruction функции.

Развертывание программы #

Вы можете нажать кнопку "Deploy", чтобы развернуть свою первую программу в блокчейне Solana. Специально для выбранного кластера (например, Devnet, Testnet и т. д.).

После каждого развертывания вы увидите изменение баланса в Playground Wallet. По умолчанию Solana Playground автоматически запрашивает airdrop SOL от вашего имени, чтобы убедиться, что в вашем кошельке достаточно SOL для покрытия расходов на развертывание.

Info

Примечание. Если вам нужно больше SOL, вы можете запросить больше, набрав команду airdrop в терминале Playground:

solana airdrop 2

Найдите ваш Id программы #

При выполнении программы с помощью web3.js или из другой программы Solana, вам нужно будет предоставить program id (так называемый публичный адрес вашей программы).

На боковой панели Playground Solana Build & Deploy, вы можете найти ваш program id под Program Credentials в раскрывающемся списке.

Поздравляем! #

Вы успешно установили, собрали и развернули программу Solana, используя язык Rust, прямо в своем браузере. Далее мы продемонстрируем, как взаимодействовать с вашей программой onchain.

Взаимодействие с вашей программой onchain #

После того как вы успешно развернете программу Solana в блокчейне, вы захотите иметь возможность взаимодействовать с этой программой.

Как и большинство разработчиков, создающих dApps и веб-сайты, мы будем взаимодействовать с нашей ончейн программой с помощью JavaScript. В частности, мы будем использовать пакет NPM @solana/web3.js с открытым исходным кодом для помощи в нашем клиентском приложении.

Info

Этот пакет web3.js представляет собой абстрактный слой поверх JSON RPC API, который уменьшает необходимость переписывания стандартного шаблона и помогает упростить код клиентского приложения.

Инициализация клиента #

Мы будем использовать Solana Playground для генерации клиента. Создайте папку клиента, выполнив run команду в терминале playground:

run

Мы создали папку client и файл по умолчанию client.ts. Именно здесь мы будем работать до конца нашей hello world программы.

Глобальные параметры Playground #

В Playground есть множество утилит, которые мы можем использовать глобально, не устанавливая и не настраивая ничего. Наиболее важными для нашей программы hello world являются web3 для @solana/web3.js и pg для Solana Playground утилиты.

Info

Вы можете просмотреть все доступные глобальные переменные, нажав CTRL+SPACE (или CMD+SPACE на macOS) внутри редактора.

Вызов программы #

Чтобы выполнить вашу программу onchain, вы должны отправить ей транзакцию. Каждая транзакция, отправленная в блокчейн Solana, содержит список инструкций (и программы, с которой эта инструкция будет взаимодействовать).

Здесь мы создаем новую транзакцию и добавляем к ней одну instruction:

// create an empty transaction
const transaction = new web3.Transaction();
 
// add a hello world program instruction to the transaction
transaction.add(
  new web3.TransactionInstruction({
    keys: [],
    programId: new web3.PublicKey(pg.PROGRAM_ID),
  }),
);

Каждый instruction должен включать в себя все ключи, вовлеченные в операцию, и идентификатор программы, который мы хотим выполнить. В этом примере keys пусто, потому что наша программа только регистрирует hello world и не требует никаких учетных записей.

После того, как наша транзакция создана, мы можем отправить ее в кластер:

// send the transaction to the Solana cluster
console.log("Sending transaction...");
const txHash = await web3.sendAndConfirmTransaction(
  pg.connection,
  transaction,
  [pg.wallet.keypair],
);
console.log("Transaction sent with hash:", txHash);
Info

По умолчанию первая подписывающая сторона в массиве подписывающих сторон является плательщиком комиссии за транзакцию. Подписываем с помощью нашей пары ключей pg.wallet.keypair.

Запуск приложения #

При написании клиентского приложения вы можете запустить код с помощью той же команды run.

Как только ваше приложение завершится, вы увидите вывод, похожий на этот:

Running client...
  client.ts:
    My address: GkxZRRNPfaUfL9XdYVfKF3rWjMcj5md6b6mpRoWpURwP
    My balance: 5.7254472 SOL
    Sending transaction...
    Transaction sent with hash: 2Ra7D9JoqeNsax9HmNq6MB4qWtKPGcLwoqQ27mPYsPFh3h8wignvKB2mWZVvdzCyTnp7CEZhfg2cEpbavib9mCcq

Получить журналы транзакций #

Мы будем использоватьsolana-cli непосредственно в Playground, чтобы получить информацию о любой транзакции:

solana confirm -v <TRANSACTION_HASH>

Смените <TRANSACTION_HASH> на хэш, который вы получили от вызова программы hello world.

Вы должны увидеть ``Hello, world!` в секции Log Messages вывода. 🎉

Поздравляем!!! #

Теперь вы написали клиентское приложение для своей программы onchain. Теперь вы разработчик Solana!

PS: Попробуйте обновить сообщение вашей программы, затем пересоберите, повторно разверните и повторно запустите программу.

Следующие шаги #

Смотрите ссылки ниже, чтобы узнать больше о написании программ Solana и настройке вашей локальной среды разработки: