@solana/kit stellt createClient bereit, einen schlanken Host, den Sie mit Plugins erweitern. Jedes
Plugin fügt eine Funktion hinzu – eine RPC-Verbindung, einen Signer, eine Transaktionsplanung –
und der zusammengesetzte Client unterstützt gleichermaßen Skripte, Server-Routen und UIs.
Entwickeln Sie eine React-App? Der React-Leitfaden kapselt denselben
Client mit @solana/react, sodass Komponenten den Wallet-Zustand und RPC-Daten
über Hooks lesen. Starten Sie dort und kehren Sie hierher zurück, wenn Sie eine feinere Kontrolle benötigen.
Installation
$npm install @solana/kit @solana/kit-plugin-rpc @solana/kit-plugin-signer
Verwenden Sie einen beliebigen Paketmanager. Kit ist v7+ und die @solana/kit-plugin-*-Pakete sind
0.13+.
Einen Client erstellen
Kombinieren Sie Plugins mit .use(...). Setzen Sie zuerst einen Signer, dann die RPC-Verbindung.
solanaDevnetRpc() fügt client.rpc, Abonnements, den Transaktionsplaner/-ausführer
und den client.sendTransaction-Helper hinzu – sodass eine App diese Komponenten selten
selbst verdrahten muss.
import { createClient, generateKeyPairSigner } from "@solana/kit";import { solanaDevnetRpc } from "@solana/kit-plugin-rpc";import { signer } from "@solana/kit-plugin-signer";const payer = await generateKeyPairSigner();const client = createClient().use(signer(payer)).use(solanaDevnetRpc());const slot = await client.rpc.getSlot().send();console.log("current slot", slot);
Das signer-Plugin legt sowohl den Fee-Zahler als auch die App-Identität fest. Das RPC-Paket
erfordert, dass zuerst ein Zahler vorhanden ist – deshalb ist die Reihenfolge wichtig.
Signer-Varianten
@solana/kit-plugin-signer bietet drei Rollen, sodass Sie nur das gewähren, was ein Client
benötigt:
signer(x)— setzt sowohlclient.payerals auchclient.identity.payer(x)— nur Fee-Zahler.identity(x)— nur App-Autorität.
Jede Rolle hat *FromFile(path)- (Node), generated*()-, generated*WithSol(amount)-
und airdrop*()-Varianten für Tests und Skripte.
Eine Transaktion senden
Erstellen Sie Anweisungen mit einem generierten Programm-Client und übergeben Sie sie dann an
client.sendTransaction. Der Planer löst den Blockhash auf, schätzt den Rechenaufwand,
signiert mit dem Payer des Clients und übermittelt die Transaktion.
import { getTransferSolInstruction } from "@solana-program/system";import { address, lamports } from "@solana/kit";const transfer = getTransferSolInstruction({source: client.payer,destination: address("Fke...address"),amount: lamports(10_000_000n) // 0.01 SOL});const { context } = await client.sendTransaction([transfer]);console.log("submitted", context.signature);
sendTransaction löst sich zu einem Ergebnisobjekt auf; die Transaktionssignatur befindet sich unter
result.context.signature. Es wird sichergestellt, dass der Plan in eine einzelne Transaktion passt, andernfalls
wird ein Fehler ausgelöst – verwenden Sie sendTransactions, wenn ein Batch mehrere
Transaktionen umfassen kann.
Ein RPC-Paket auswählen
@solana/kit-plugin-rpc enthält Cluster-Voreinstellungen:
solanaDevnetRpc()— Devnet-Standardwerte, Airdrop aktiviert (client.airdrop).solanaMainnetRpc()— Mainnet; Airdrop ist ein Kompilierungsfehler.solanaLocalRpc()—http://127.0.0.1:8899für einen lokalen validator.solanaRpc({ rpcUrl })— beliebiger Endpunkt.
import { solanaRpc } from "@solana/kit-plugin-rpc";const client = createClient().use(signer(payer)).use(solanaRpc({ rpcUrl: "https://your-rpc-provider.example" }));
Granular zusammenstellen
Die Voreinstellungen bündeln die RPC-Verbindung, den Planer, den Ausführer und die Send-Helper,
sodass die meisten Apps die einzelnen Komponenten nie separat benötigen. Wechseln Sie nur dann zu den granularen Plugins,
wenn Sie eine davon anpassen möchten – zum Beispiel einen benutzerdefinierten Planer oder einen anderen Abonnementkanal. Dieser Pfad benötigt außerdem @solana/kit-plugin-instruction-plan, das die
Voreinstellungen andernfalls für Sie einschließen:
import {solanaRpcConnection,rpcAirdrop,rpcTransactionPlanner,rpcTransactionPlanExecutor} from "@solana/kit-plugin-rpc";import { planAndSendTransactions } from "@solana/kit-plugin-instruction-plan";const client = createClient().use(signer(payer)).use(solanaRpcConnection({ rpcUrl: "https://api.devnet.solana.com" })).use(rpcAirdrop()).use(rpcTransactionPlanner()).use(rpcTransactionPlanExecutor()).use(planAndSendTransactions());
Programm-Clients hinzufügen
Generierte @solana-program/*-Pakete stellen Client-Plugins bereit, sodass Programmaufrufe
am Client hängen. Installieren Sie das benötigte Programm und verwenden Sie .use() mit seinem Plugin:
import { tokenProgram } from "@solana-program/token";const client = createClient().use(signer(payer)).use(solanaDevnetRpc()).use(tokenProgram()); // adds client.token
Signieren ohne Browser-Wallet
Laufen Sie headless in einer API-Route, einem Worker oder einem Skript? Signieren Sie mit einem Backend- Schlüsselverwaltungsdienst statt mit einem rohen keypair. Siehe Keychain und Signieren in der Produktion.
Häufige Muster für Solana-Entwickler
- Gemeinsames Setup: Erstellen Sie den Client einmal in einem Kernmodul und importieren Sie ihn in Skripte, Server-Routen und Ihre UI.
- Serverseitige Lesezugriffe: Ein Client mit nur
signer+solanaRpc(ohne Wallet- Plugin) liest Konten und simuliert Transaktionen vom Server aus. - Lokales Testen: Ersetzen Sie das RPC-Paket durch
.use(litesvm())aus@solana/kit-plugin-litesvm, um gegen einen In-Memory-validator zu testen (nur Node). - Testbarkeit: Der zusammengesetzte Client lässt sich leicht mocken – stubben Sie RPC-Antworten oder Signer, ohne dass ein Browser-Wallet vorhanden sein muss.
Is this page helpful?