@solana/client обеспечивает минимальный runtime-интерфейс. Один store, один
RPC-стек и реестр кошельков поддерживают различные вспомогательные функции,
чтобы один и тот же экземпляр мог использоваться для CLI, скриптов или
полноценных UI. Actions, watchers и helpers используют общий кэш, подписки и
сессии кошелька через этот единый клиент.
Если вы строите исключительно React-приложение, обычно быстрее начать с
@solana/react-hooks. Пакет hooks оборачивает
этот же client runtime и предоставляет готовые хуки, так что к headless client
вы обращаетесь только при необходимости дополнительного контроля.
Установка
$npm install @solana/client
Используйте любой пакетный менеджер; клиент работает в браузерах, воркерах, React, Svelte или серверных рантаймах.
Создайте клиент один раз
Выберите Wallet Standard-коннекторы (автообнаружение — самый быстрый способ начать), затем создайте клиент. Этот единый объект предоставляет store, actions, watchers и helpers.
import { autoDiscover, createClient } from "@solana/client";const client = createClient({endpoint: "https://api.devnet.solana.com",websocketEndpoint: "wss://api.devnet.solana.com",walletConnectors: autoDiscover()});await client.actions.connectWallet("wallet-standard:phantom");const balance = await client.actions.fetchBalance("Fke...address");console.log(balance.lamports?.toString());
Store клиента отслеживает конфигурацию кластера, подписки, ожидающие транзакции и сессии кошелька. Вы можете использовать собственный store на Zustand, если вам нужна персистентность или координация между вкладками.
Оркестрация кошельков
Коннекторы инкапсулируют метаданные Wallet Standard и логику
подключения/отключения. Зарегистрируйте встроенные phantom(), solflare(),
backpack() или autoDiscover() helpers, либо оберните кастомные провайдеры с
помощью createWalletStandardConnector. Все действия с кошельком (connect,
disconnect, sign, send) проходят через реестр клиента, чтобы все потребители
оставались синхронизированы.
Actions, watchers и helpers
- Actions оборачивают типовые RPC-запросы на чтение и запись, обновляя store
(например,
fetchAccount,requestAirdrop,setCluster). - Watchers мультиплексируют подписки на websocket, стримят обновления в store и предоставляют abort handles для очистки.
- Helpers реализуют более высокоуровневые сценарии, такие как переводы SOL, работу с SPL-токенами, отслеживание подписей и пулы транзакций.
const abortWatcher = client.watchers.watchBalance({ address: "Fke...address" },(lamports) => {console.log("live balance", lamports.toString());});// Later when the component unmounts or the flow endsabortWatcher.abort();
Паттерн помощника для транзакций
Помощник для транзакций отвечает за обновление blockhash, определение плательщика комиссии и подпись. Вы можете подготовить, проверить и отправить транзакцию с любым удобным для вас UX.
const prepared = await client.helpers.transaction.prepare({authority: client.store.getState().wallet.session!,instructions: [instructionA, instructionB]});await client.helpers.transaction.simulate(prepared, {commitment: "processed"});const signature = await client.helpers.transaction.send(prepared);console.log("submitted", signature.toString());
Используйте prepareAndSend для готового процесса (симуляция плюс логирование)
или вызывайте sign / toWire, чтобы собрать подписи вручную перед тем, как
самостоятельно отправить wire-формат.
Работаете в безголовом режиме — в API-маршруте, воркере или скрипте без браузерного кошелька? Используйте сервис управления ключами на бэкенде вместо использования raw keypair. Смотрите Keychain и Подписание в продакшене.
Распространённые паттерны для Solana-разработчиков
- Безголовые конечные автоматы: Запускайте клиент внутри API-маршрутов, скриптов или воркеров, чтобы переиспользовать одну и ту же логику оркестрации кошелька и RPC, которая лежит в основе вашего UI.
- Дашборды реального времени: Комбинируйте наблюдателей (балансы, аккаунты, подписи) с предпочитаемой UI-библиотекой; клиент берёт на себя мультиплексирование WebSocket и инвалидацию кэша.
- Кастомные хранилища: Подключите собственное Zustand-хранилище для гидратации из IndexedDB/localStorage, зеркалирования состояния в серверные сессии или координации между вкладками браузера.
- Интеграция с React-хуками: Передайте сконфигурированный экземпляр клиента
в
@solana/react-hooks, если хотите удобные хуки поверх того же рантайма. - Тестируемость: Единый интерфейс клиента можно замокировать в юнит-тестах, что упрощает симуляцию RPC-ответов или сессий кошелька без наличия браузерного кошелька.
Is this page helpful?