@solana/client

@solana/client обеспечивает минимальный runtime-интерфейс. Один store, один RPC-стек и реестр кошельков поддерживают различные вспомогательные функции, чтобы один и тот же экземпляр мог использоваться для CLI, скриптов или полноценных UI. Actions, watchers и helpers используют общий кэш, подписки и сессии кошелька через этот единый клиент.

Если вы строите исключительно React-приложение, обычно быстрее начать с @solana/react-hooks. Пакет hooks оборачивает этот же client runtime и предоставляет готовые хуки, так что к headless client вы обращаетесь только при необходимости дополнительного контроля.

Установка

Terminal
$
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 ends
abortWatcher.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?