客户端工具包

@solana/kit 提供了 createClient,这是一个可通过插件扩展的轻量级宿主。每个插件添加一种能力——RPC 连接、签名者、交易规划——组合后的客户端可同时支持脚本、服务端路由和 UI。

正在构建 React 应用?React 指南使用 @solana/react 封装了相同的客户端,让组件能通过 hooks 读取钱包状态和 RPC 数据。建议先从那里开始,需要更精细的控制时再回到本文档。

安装

Terminal
$
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 提供三种角色,让您只授予客户端所需的权限:

  • signer(x) — 同时设置 client.payerclient.identity
  • payer(x) — 仅设置手续费支付者。
  • identity(x) — 仅设置应用权限身份。

每种角色均提供 *FromFile(path)(Node 环境)、generated*()generated*WithSol(amount)airdrop*() 变体,适用于测试和脚本场景。

发送交易

使用生成的程序客户端构建指令,然后将其传入 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.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 路由、Worker 或脚本中无界面运行?请使用后端密钥管理服务进行签名,而非原始 keypair。详见Keychain生产环境签名

Solana 开发者常用模式

  • 共享配置:在核心模块中一次性构建客户端,并将其导入脚本、服务端路由和 UI 中复用。
  • 服务端读取:仅配置 signer + solanaRpc(不含钱包插件)的客户端,即可从服务端读取账户数据和模拟交易。
  • 本地测试:将 RPC 捆绑包替换为来自 @solana/kit-plugin-litesvm.use(litesvm()),以连接内存中的 validator 运行测试(仅限 Node 环境)。
  • 可测试性:组合后的客户端易于模拟——无需浏览器钱包即可桩化 RPC 响应或签名者。

Is this page helpful?

Table of Contents

Edit Page
©️ 2026 Solana 基金会版权所有