Последнее обновление: 31.10.2025
Основы Kora
Kora — это JSON-RPC сервер, который предоставляет услуги по оплате комиссий за транзакции Solana. Он позволяет пользователям оплачивать комиссии за транзакции токенами SPL вместо SOL, обеспечивая лучший пользовательский опыт для приложений, где у пользователей может не быть SOL.
Kora RPC проверяет запросы клиентов на основе конфигурации (kora.toml),
которая определяет разрешённые программы, кошельки, токены и т.д. После проверки
сервер Kora подписывает транзакцию и отправляет её в сеть (или возвращает
клиенту сериализованную подписанную транзакцию).
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐│ Client App │───▶│ Kora RPC │───▶│ Solana RPC ││ │ │ Server │ │ │└─────────────────┘ └─────────────────┘ └─────────────────┘│▼┌──────────────────────┐│ Kora Private Key ││ ( or Turnkey/Privy ) │└──────────────────────┘
Это краткое руководство запустит локальный RPC-сервер Kora и продемонстрирует интеграцию клиента для тестирования процессов оплаты комиссий.
Требования
- Solana CLI версии 2.2.x или выше
- Rust/Cargo (для установки Kora RPC)
- Node.js v22+ и менеджер пакетов (например, pnpm, npm)
Установка Kora RPC
Установите сервер Kora RPC глобально:
cargo install kora-cli
Важно: Ветка
mainKora является интеграционной ветью и может содержать неопубликованные или бета-изменения. Всегда используйте последний стабильный тег релиза для продакшена и руководств. Последний стабильный релиз можно найти на странице релизов Kora.
Создание проекта
Клонируйте репозиторий, переключитесь на последний стабильный тег и перейдите в директорию демонстрации для начинающих:
git clone https://github.com/solana-foundation/koracd koragit checkout v2.0.5cd examples/getting-started/demo
Структура проекта
Демонстрация содержит три основных компонента:
Директория клиента (client/src/)
setup.ts- Настройка локального окружения (создаёт keypair и записывает их в .env, выдаёт SOL через airdrop, инициализирует тестовый токен)quick-start.ts- Демонстрационный скрипт краткого руководства, показывающий установление соединения с Kora и выполнение простого вызова к серверу Kora RPCfull-demo.ts- Полный демонстрационный скрипт, показывающий множество методов Kora RPC
Директория сервера (server/)
kora.toml- Конфигурация Kora RPC, определяющая правила валидации, разрешенные токены и параметры комиссийsigners.toml- Конфигурация подписантов, определяющая подписантов для сервера Kora
Общая конфигурация
.env- Переменные окружения для keypair и адресов (создайте.envв корневой директории -demo/.env). Переменные окружения будут созданы скриптом установки.
Настройка окружения
Сначала создайте .env для вашего окружения:
# Create .env file (will be populated by setup script)touch .env
Настройка клиента
Установите зависимости клиента:
# From project root (kora/)cd examples/getting-started/demo/clientpnpm install --ignore-workspace # use --ignore-workspace to avoid pnpm workspace conflicts
Настройка сервера Kora RPC
Сервер Kora требует настройки для указания, какие токены могут быть использованы
для оплаты комиссий. Откройте server/kora.toml и обратите внимание на секцию
валидации. Здесь мы можем указать несколько параметров, которые будут проверены
перед подписанием транзакции:
max_allowed_lamports: максимальная комиссия за транзакцию, которую вы готовы оплатить от имени пользователяmax_signatures: максимальное количество подписей, которое может иметь транзакцияprice_source: оракул для определения цены токена ("Mock" или "Jupiter")allowed_programs: белый список идентификаторов программ, которые могут быть выполнены (например, System Program, Token Program)allowed_tokens: белый список токенов, которые разрешено передаватьallowed_spl_paid_tokens: массив адресов mint-токенов, которые ваша программа принимает в качестве оплатыdisallowed_accounts: черный список аккаунтов, которым не разрешено взаимодействовать с вашим сервером Kora RPC
Пока оставим значения по умолчанию — вы сможете вернуться сюда и изменить их позже (для получения дополнительной информации о параметрах конфигурации см. документацию Конфигурация Kora).
Настройка подписантов
Откройте server/signers.toml и обратите внимание на секцию подписантов. Здесь
мы можем указать, какие подписанты будут использоваться для подписания
транзакций и (при использовании нескольких подписантов) стратегию выбора
подписанта. Пока используем одного подписанта со значениями по умолчанию — вы
сможете вернуться сюда и изменить их позже (для получения дополнительной
информации о конфигурации подписантов см.
Руководство по подписантам).
Тестовый сервер
Откройте три терминала и выполните следующие команды:
Терминал 1: Запуск локального тестового валидатора
# From project root or anywheresolana-test-validator -r
Терминал 2: Инициализация окружения
# From ./client directorypnpm init-env
Этот скрипт выполнит следующие действия:
- Сгенерирует пары ключей и сохранит их в
.env - Переведёт SOL на тестовые аккаунты
- Создаст и инициализирует локальный токен USDC
- Пополнит тестовые аккаунты токенами
Важно: Обязательно скопируйте публичный ключ нового тестового токена USDC из
вашего .env и обновите allowed_tokens и allowed_spl_paid_tokens в
./server/kora.toml.
allowed_tokens = ["YOUR_USDC_LOCAL_PUBLICK_KEY" # Update this based on the USDC_LOCAL_KEY public key comment in your .env]allowed_spl_paid_tokens = ["YOUR_USDC_LOCAL_PUBLICK_KEY" # Update this based on the USDC_LOCAL_KEY public key comment in your .env]
Терминал 3: Инициализация ATA для платежей (опционально)
Для получения платежей необходимо инициализировать Associated Token Accounts (ATA) для ваших платёжных токенов. Вы можете сделать это, выполнив следующую команду:
# From ./server directorykora rpc initialize-atas --signers-config signers.toml
Эта команда выполнит следующие действия:
- Прочитает ваш платёжный адрес из
kora.toml(или, если вы не указали платёжный адрес, всех подписантов, перечисленных вsigners.toml) - Создаст ATA для всех токенов, указанных в
allowed_spl_paid_tokens - Пропустит все уже существующие ATA
- Вы можете опционально указать пользовательского плательщика комиссий для
создания ATA, используя флаг
fee_payer_key.
Терминал 4: Запуск RPC-сервера Kora
# From ./server directorykora rpc start --signers-config signers.toml
Примечание: Для производственных развёртываний с использованием
price_source = "Jupiter"необходимо установить переменную окруженияJUPITER_API_KEY. Без неё сервер не запустится:JUPITER_API_KEY=your_api_key kora rpc start --signers-config signers.toml
Сервер читает конфигурацию из kora.toml и signers.toml и использует
переменные окружения из общего файла .env. Если вы используете структуру
папок, отличающуюся от указанной здесь, вам может потребоваться использовать
--config для указания расположения kora.toml и --signers-config для
указания каталога конфигурации ваших подписантов:
kora rpc --config path/to/kora.toml start --signers-config path/to/signers.toml
Вы можете обратиться к kora rpc -h за справкой по параметрам RPC-сервера.
Терминал 5: Запуск демонстрации клиента
# From ./client directorypnpm start
Вы должны увидеть результат, похожий на:
Kora Config: {fee_payer: 'Df2UmGQH86TBDsub7XZoSAo7KZa1ZJZr2w1PL1APUjjU',validation_config: {max_allowed_lamports: 1000000,max_signatures: 10,allowed_programs: ['11111111111111111111111111111111','TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA','ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL','AddressLookupTab1e1111111111111111111111111','ComputeBudget11111111111111111111111111111111'],allowed_tokens: ['usdCAEFbouFGxdkbHCRtMTcN7DJHd3aCmP9vqjLgmAp'],allowed_spl_paid_tokens: ['usdCAEFbouFGxdkbHCRtMTcN7DJHd3aCmP9vqjLgmAp'],disallowed_accounts: [],price_source: 'Mock',fee_payer_policy: {...},price: { type: 'margin', margin: 0 }},enabled_methods: { ... }}}Blockhash: C8W8d5w2H4jKXyFg5CEBoiaPvEpJ1am7xLxZ3fym4a2g
Это подтверждает, что ваш сервер Kora работает и правильно настроен!
Следующие шаги
После того как базовая настройка заработает, ознакомьтесь с полной демонстрацией работы Kora:
→ Полный поток беспплатных транзакций Kora
изучите дополнительные методы RPC Kora:
estimateTransactionFee- Расчёт комиссий для транзакцийgetPayerSigner- Получение подписанта плательщика и назначения платежаgetSupportedTokens- Возвращает массив поддерживаемых токенов для оплатыsignTransaction- Условное подписание транзакций при покрытии комиссийtransferTransaction- Создание транзакций перевода SOL или SPL-токенов (подписанных плательщиком комиссий Kora)signAndSendTransaction- Условно подписывает транзакцию плательщиком комиссий Kora и отправляет её на настроенный RPC SolanagetPaymentInstruction- Получение инструкции оплаты для транзакции
Есть вопросы? Задавайте вопросы на
Solana Stack Exchange с тегом Kora.
Is this page helpful?