@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.
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 twoje UI.
- Pulpity na żywo: Połącz watchery (salda, konta, podpisy) z wybraną przez siebie biblioteką UI; klient obsługuje rozsyłanie przez websockety i unieważnianie cache.
- Własne store'y: Wstrzyknij własny store Zustand, aby zasilać dane z IndexedDB/localStorage, synchronizować stan z sesjami serwera lub koordynować między kartami przeglądarki.
- Most do React hooks: Przekaż skonfigurowaną instancję klienta do
@solana/react-hooks, gdy chcesz korzystać z ergonomicznych hooków na tej samej platformie. - Testowalność: Jeden interfejs klienta można mockować w testach jednostkowych, co ułatwia symulowanie odpowiedzi RPC lub sesji portfela bez obecności portfela w przeglądarce.
Is this page helpful?