@solana/kit поставляется с createClient — небольшим хостом, который расширяется с помощью плагинов. Каждый
плагин добавляет возможность — RPC-соединение, подписчика, планирование транзакций —
а составной клиент одинаково подходит для скриптов, серверных маршрутов и UI.
Создаёте React-приложение? Руководство по React оборачивает тот же
клиент с помощью @solana/react, чтобы компоненты читали состояние кошелька и данные 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. Планировщик разрешает 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?