@solana/kit は createClient を提供します。これはプラグインで拡張できる小さなホストです。各プラグインは機能を追加します — RPC接続、署名者、トランザクション計画 — そして構成されたクライアントはスクリプト、サーバールート、UIのいずれにも対応します。
Reactアプリを構築していますか? Reactガイドは、コンポーネントがフックを通じてウォレットの状態とRPCデータを読み取れるよう、この同じクライアントを @solana/react でラップしています。まずそちらを参照し、より細かい制御が必要になったらここに戻ってください。
インストール
$npm install @solana/kit @solana/kit-plugin-rpc @solana/kit-plugin-signer
任意のパッケージマネージャーを使用してください。Kitはv7以上、@solana/kit-plugin-* パッケージは0.13以上です。
クライアントの作成
.use(...) でプラグインを組み合わせます。最初に署名者を設定し、次にRPC接続を設定します。solanaDevnetRpc() は client.rpc、サブスクリプション、トランザクションプランナー/エグゼキューター、および client.sendTransaction ヘルパーを追加します — そのため、アプリがこれらの部品を個別に組み合わせる必要はほとんどありません。
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);
signer プラグインは手数料支払者とアプリのアイデンティティの両方を設定します。RPCバンドルは事前に支払者が設定されている必要があるため、順序が重要です。
署名者のバリアント
@solana/kit-plugin-signer は3つのロールを提供し、クライアントに必要な権限のみを付与できます:
signer(x)—client.payerとclient.identityの両方を設定します。payer(x)— 手数料支払者のみ。identity(x)— アプリの権限のみ。
それぞれにテストやスクリプト用の *FromFile(path)(Node)、generated*()、generated*WithSol(amount)、airdrop*() バリアントがあります。
トランザクションの送信
生成されたプログラムクライアントでinstructionsを構築し、client.sendTransaction に渡します。プランナーはブロックハッシュを解決し、コンピュートを見積もり、クライアントの支払者で署名して送信します。
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 はresultオブジェクトに解決されます。トランザクション署名は result.context.signature にあります。プランが単一のトランザクションに収まることをアサートし、そうでない場合はスローします — バッチが複数のトランザクションにまたがる可能性がある場合は sendTransactions を使用してください。
RPCバンドルの選択
@solana/kit-plugin-rpc はクラスタープリセットを提供します:
solanaDevnetRpc()— devnetのデフォルト、エアドロップ有効(client.airdrop)。solanaMainnetRpc()— メインネット。エアドロップはコンパイル時エラーになります。solanaLocalRpc()— ローカルvalidator用のhttp://127.0.0.1:8899。solanaRpc({ rpcUrl })— 任意のエンドポイント。
import { solanaRpc } from "@solana/kit-plugin-rpc";const client = createClient().use(signer(payer)).use(solanaRpc({ rpcUrl: "https://your-rpc-provider.example" }));
細粒度での構成
プリセットはRPC接続、プランナー、エグゼキューター、送信ヘルパーをまとめているため、ほとんどのアプリは個別の部品を必要としません。カスタムプランナーや異なるサブスクリプションチャンネルなど、一部をカスタマイズする場合にのみ細粒度のプラグインを使用してください。このパスには @solana/kit-plugin-instruction-plan も必要です(プリセットは通常これを含んでいます):
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());
プログラムクライアントの追加
生成された @solana-program/* パッケージはクライアントプラグインを公開しており、プログラム呼び出しをクライアントにぶら下げることができます。必要なプログラムをインストールし、.use() でプラグインを追加します:
import { tokenProgram } from "@solana-program/token";const client = createClient().use(signer(payer)).use(solanaDevnetRpc()).use(tokenProgram()); // adds client.token
ブラウザウォレットなしでの署名
APIルート、ワーカー、またはスクリプトでヘッドレス実行していますか?生のkeypairの代わりにバックエンドのキー管理サービスで署名してください。Keychainと本番環境での署名を参照してください。
Solana開発者向けの一般的なパターン
- 共有セットアップ:コアモジュールで一度クライアントを構築し、スクリプト、サーバールート、UIにインポートします。
- サーバーサイドの読み取り:
signer+solanaRpc(ウォレットプラグインなし)のみのクライアントで、サーバーからアカウントを読み取りトランザクションをシミュレートします。 - ローカルテスト:
@solana/kit-plugin-litesvmの.use(litesvm())にRPCバンドルを切り替えて、インメモリvalidator(Nodeのみ)に対して実行します。 - テスト容易性:構成されたクライアントはモックが簡単です — ブラウザウォレットなしでRPCレスポンスや署名者をスタブできます。
Is this page helpful?