@solana/client utrzymuje runtime w lekkiej formie. Jeden store, jeden stos RPC
i rejestr portfeli zasilają różne helpery, dzięki czemu ta sama instancja może
obsługiwać CLI, skrypty lub pełne interfejsy użytkownika. Akcje, watchery i
helpery współdzielą cache, subskrypcje i sesje portfela przez tego jednego
klienta.
Jeśli budujesz doświadczenie wyłącznie w React, zwykle szybciej jest zacząć od
@solana/react-hooks. Pakiet hooks opakowuje
ten sam runtime klienta i udostępnia gotowe hooki, więc sięgasz po bezgłowego
klienta tylko wtedy, gdy potrzebujesz większej kontroli.
Instalacja
$npm install @solana/client
Użyj dowolnego menedżera pakietów; klient działa w przeglądarkach, workerach, React, Svelte lub środowiskach serwerowych.
Utwórz klienta tylko raz
Wybierz konektory Wallet Standard (auto-detekcja to najszybszy sposób na start), a następnie utwórz klienta. Ten pojedynczy obiekt udostępnia store, akcje, watchery i helpery.
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 klienta śledzi konfigurację klastra, subskrypcje, oczekujące transakcje i sesje portfela. Możesz podać własny store Zustand, jeśli potrzebujesz trwałości lub koordynacji między kartami.
Orkiestracja portfeli
Konektory kapsułkują metadane Wallet Standard oraz logikę
połączenia/rozłączenia. Zarejestruj wbudowane phantom(), solflare(),
backpack() lub autoDiscover() helpery albo opakuj własnych providerów za
pomocą createWalletStandardConnector. Wszystkie akcje portfela (połącz,
rozłącz, podpisz, wyślij) przechodzą przez rejestr klienta, dzięki czemu każdy
konsument pozostaje zsynchronizowany.
Akcje, watchery i helpery
- Akcje opakowują typowe odczyty i zapisy RPC, aktualizując przy tym store
(np.
fetchAccount,requestAirdrop,setCluster). - Watchery multipleksują subskrypcje websocket, przesyłają aktualizacje do store i udostępniają uchwyty do anulowania dla czyszczenia.
- Helpery udostępniają wyższe poziomy przepływów, takie jak transfery SOL, helpery tokenów SPL, polling podpisów i pule transakcji.
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();
Wzorzec pomocnika transakcji
Pomocnik transakcji odpowiada za odświeżanie blockhash, wybór płatnika opłat oraz podpisywanie. Możesz przygotować, sprawdzić i wysłać transakcję w dowolny sposób, który najlepiej pasuje do twojego 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());
Użyj prepareAndSend dla gotowego przepływu (symulacja plus logowanie) lub
wywołaj sign / toWire, aby zebrać podpisy ręcznie, zanim samodzielnie
przekażesz format wire.
Działasz w trybie headless — w trasie API, workerze lub skrypcie bez portfela przeglądarkowego? Zamiast surowego keypair użyj backendowego serwisu zarządzania kluczami. Zobacz Keychain oraz Podpisywanie w Produkcji.
Typowe wzorce dla deweloperów Solana
- Bezgłowe maszyny stanów: Uruchamiaj klienta wewnątrz tras API, skryptów lub workerów, aby ponownie wykorzystać tę samą logikę orkiestracji portfela + RPC, która zasila Twój interfejs użytkownika.
- Dashboardy czasu rzeczywistego: Łącz obserwatory (salda, konta, sygnatury) z preferowaną biblioteką UI; klient obsługuje rozgałęzianie websocketów i unieważnianie pamięci podręcznej.
- Niestandardowe store'y: Wstrzyknij własny store Zustand, aby hydratować dane z IndexedDB/localStorage, odzwierciedlać stan w sesjach serwera lub koordynować pracę między kartami przeglądarki.
- Połączenie z hookami React: Przekaż skonfigurowaną instancję klienta do
@solana/react-hooks, gdy chcesz ergonomicznych hooków na bazie tego samego środowiska uruchomieniowego. - Testowalność: Pojedynczy interfejs klienta można mockować w testach jednostkowych, co ułatwia symulowanie odpowiedzi RPC lub sesji portfela bez obecności portfela przeglądarkowego.
Is this page helpful?