@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. Планувальник отримує блокхеш, оцінює обчислення,
підписує за допомогою платника клієнта та надсилає транзакцію.
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, воркері або скрипті? Підписуйте за допомогою сервісу керування ключами на бекенді замість сирого keypair. Дивіться Keychain та Підписання у виробничому середовищі.
Поширені патерни для Solana-розробників
- Спільне налаштування: Створіть клієнт один раз у основному модулі та імпортуйте його до скриптів, серверних маршрутів і UI.
- Читання на стороні сервера: Клієнт лише з
signer+solanaRpc(без плагіна гаманця) читає акаунти та симулює транзакції з сервера. - Локальне тестування: Замініть RPC-пакет на
.use(litesvm())із@solana/kit-plugin-litesvm, щоб запускати тести проти in-memory validator (лише Node). - Тестованість: Складений клієнт легко мокувати — замінюйте RPC-відповіді або підписувачі без необхідності мати браузерний гаманець.
Is this page helpful?