@solana/kit 提供了 createClient,这是一个可通过插件扩展的轻量级宿主。每个插件添加一种能力——RPC 连接、签名者、交易规划——组合后的客户端可同时支持脚本、服务端路由和 UI。
正在构建 React 应用?React 指南使用 @solana/react 封装了相同的客户端,让组件能通过 hooks 读取钱包状态和 RPC 数据。建议先从那里开始,需要更精细的控制时再回到本文档。
安装
$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.payer和client.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?