Kit-Client

@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

Terminal
$
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 sowohl client.payer als auch client.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:8899 fü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?

Inhaltsverzeichnis

Seite bearbeiten
© 2026 Solana Foundation. Alle Rechte vorbehalten.