Kit клиент

@solana/kit поставляется с createClient — небольшим хостом, который расширяется с помощью плагинов. Каждый плагин добавляет возможность — RPC-соединение, подписчика, планирование транзакций — а составной клиент одинаково подходит для скриптов, серверных маршрутов и UI.

Создаёте React-приложение? Руководство по React оборачивает тот же клиент с помощью @solana/react, чтобы компоненты читали состояние кошелька и данные 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.payer, и client.identity.
  • payer(x) — только плательщик комиссии.
  • identity(x) — только авторитет приложения.

Каждый имеет варианты *FromFile(path) (Node), generated*(), generated*WithSol(amount) и airdrop*() для тестов и скриптов.

Отправка транзакции

Создайте инструкции с помощью сгенерированного клиента программы, затем передайте их в client.sendTransaction. Планировщик разрешает blockhash, оценивает вычислительные ресурсы, подписывает с помощью плательщика клиента и отправляет.

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 по умолчанию, airdrop включён (client.airdrop).
  • solanaMainnetRpc() — mainnet; airdrop является ошибкой времени компиляции.
  • solanaLocalRpc()http://127.0.0.1:8899 для локального validator.
  • 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

Подписание без браузерного кошелька

Запускаете в режиме headless в API-маршруте, воркере или скрипте? Подписывайте с помощью бэкенд-сервиса управления ключами вместо raw keypair. Смотрите Keychain и Подписание в продакшне.

Типичные паттерны для разработчиков Solana

  • Общая настройка: Создайте клиент один раз в основном модуле и импортируйте его в скрипты, серверные маршруты и UI.
  • Чтение на стороне сервера: Клиент только с signer + solanaRpc (без плагина кошелька) читает аккаунты и симулирует транзакции на сервере.
  • Локальное тестирование: Замените RPC-пакет на .use(litesvm()) из @solana/kit-plugin-litesvm для запуска против in-memory validator (только Node).
  • Тестируемость: Составной клиент легко мокировать — заглушайте RPC-ответы или подписчиков без браузерного кошелька.

Is this page helpful?