Используете Kora v2.2.0-beta? См. Конфигурация бета-версии для новых опций: пакеты Jito, защита Lighthouse, reCAPTCHA и лимиты использования.
Ваша нода Kora будет подписывать транзакции для ваших пользователей, поэтому
важно настроить её так, чтобы она подписывала только те транзакции, которые
соответствуют вашим бизнес-требованиям. Kora предоставляет большую гибкость в
настройке вашей ноды, но важно понимать последствия вашей конфигурации.
kora.toml является центром управления конфигурацией Kora. Этот документ
содержит исчерпывающий справочник по настройке вашей ноды Kora paymaster через
конфигурационный файл kora.toml.
Обзор
Файл kora.toml управляет всеми аспектами поведения вашей ноды Kora, включая:
- Ограничение скорости и аутентификацию
- Доступность методов RPC
- Правила валидации транзакций
- Модели ценообразования комиссий
- Политики безопасности
- Доступность методов RPC
- Модели ценообразования комиссий
- Конфигурацию платёжных адресов
- Мониторинг производительности
Ваш конфигурационный файл должен быть размещён в каталоге развёртывания или
указан через флаг --config при запуске сервера.
Разделы конфигурации
Файл kora.toml организован в разделы, каждый из которых имеет свой набор
параметров. Это руководство проведёт вас через каждый раздел и объяснит
доступные опции:
- Основные политики Kora - Основные настройки сервера
- Аутентификация Kora - Настройки аутентификации
- Кэширование Kora - Кэширование Redis для вызовов RPC
- Лимиты использования Kora - Ограничение транзакций для каждого кошелька
- Включённые методы Kora - Методы RPC Kora для активации
- Политики валидации - Валидация транзакций и безопасность
- Блокировка расширений Token-2022 - Блокировка рискованных расширений Token-2022
- Политика плательщика комиссий - Ограничения для кошелька плательщика комиссий
- Конфигурация цен - Модели ценообразования комиссий за транзакции
- Мониторинг производительности - Сбор метрик и мониторинг
- Полный пример - Полная готовая к продакшену конфигурация
Пример разделов файла kora.toml:
[kora]# Core server settings[kora.auth]# Authentication settings[kora.cache]# Redis caching configuration[kora.usage_limit]# Per-wallet transaction limiting[kora.enabled_methods]# Kora RPC methods to enable[validation]# Transaction validation rules[validation.token2022]# Token-2022 extension blocking[validation.fee_payer_policy]# Restrictions on fee payer wallet[validation.price]# Transaction fee pricing models[metrics]# Performance monitoring
Основные политики Kora
Раздел [kora] настраивает основное поведение сервера:
[kora]rate_limit = 100payment_address = "YourPaymentAddressPubkey11111111111111111111" # Optional
| Параметр | Описание | Обязательный | Тип |
|---|---|---|---|
rate_limit | Глобальное ограничение скорости (запросов в секунду) для всех клиентов | ✅ | number |
payment_address | Необязательный адрес для получения платежных токенов (по умолчанию используется адрес(а) подписанта, если не указан) | ❌ | строка в кодировке b58 |
Аутентификация Kora
Раздел [kora.auth] настраивает аутентификацию для сервера Kora:
[kora.auth]api_key = "kora_live_sk_1234567890abcdef"hmac_secret = "kora_hmac_your-strong-hmac-secret-key-here"max_timestamp_age = 300
| Параметр | Описание | Обязательный | Тип |
|---|---|---|---|
api_key | API-ключ для простой аутентификации | ❌ | string |
hmac_secret | HMAC-секрет для аутентификации на основе подписи (минимум 32 символа) | ❌ | string |
max_timestamp_age | Максимальный возраст метки времени HMAC в секундах | ❌ (по умолчанию: 300) | number |
Примечание:
api_keyиhmac_secretустанавливают глобальную политику аутентификации для всех клиентов. Для подробной настройки аутентификации см. Руководство по аутентификации.
Кэширование Kora (необязательно)
Раздел [kora.cache] настраивает кэширование на основе Redis для вызовов Solana
RPC. Это может значительно повысить производительность за счет уменьшения
избыточных запросов данных аккаунтов:
[kora.cache]enabled = true # Enable/disable cachingurl = "redis://localhost:6379" # Redis connection URLdefault_ttl = 300 # Default TTL in seconds (5 minutes)account_ttl = 60 # Account data TTL in seconds (1 minute)
| Параметр | Описание | Обязательный | Тип |
|---|---|---|---|
enabled | Включить кэширование Redis для RPC-вызовов | ❌ (по умолчанию: false) | boolean |
url | URL подключения к Redis (обязательно при включении) | ✅ | string |
default_ttl | TTL по умолчанию для кэшированных записей в секундах | ❌ (по умолчанию: 300) | number |
account_ttl | TTL для кэша данных аккаунтов в секундах | ❌ (по умолчанию: 60) | number |
Примечание: При включенном кэшировании экземпляр Redis должен быть доступен по указанному URL. Кэш корректно переключается на прямые RPC-вызовы, если Redis недоступен.
Лимиты использования Kora (опционально)
Раздел [kora.usage_limit] настраивает ограничение транзакций для каждого
кошелька, чтобы предотвратить злоупотребления и обеспечить справедливое
использование для всех пользователей. Это также можно использовать для создания
программ вознаграждений, субсидирующих комиссии за транзакции пользователей до
определённого лимита.
Важно: В настоящее время единственной формой ограничения использования, поддерживаемой Kora, является постоянный лимит. Как только кошелёк достигает своего лимита транзакций, он не может быть сброшен, и пользователь больше не сможет отправлять транзакции, используя тот же кошелёк. Этот лимит сохраняется до тех пор, пока не будет вручную очищен из Redis или данные Redis не будут сброшены.
Примечание: Эта функция требует Redis при включении на нескольких экземплярах Kora:
[kora.usage_limit]enabled = true # Enable/disable usage limitingcache_url = "redis://localhost:6379" # Redis URL for shared state (required when enabled)max_transactions = 100 # Max transactions per wallet (0 = unlimited)fallback_if_unavailable = true # Continue if Redis is unavailable
| Параметр | Описание | Обязательный | Тип |
|---|---|---|---|
enabled | Включить ограничение транзакций для каждого кошелька | ❌ (по умолчанию: false) | boolean |
cache_url | URL подключения Redis для общего отслеживания использования | ❌ | string |
max_transactions | Максимальное количество транзакций на кошелёк (0 = неограничено) | ❌ (по умолчанию: 100) | number |
fallback_if_unavailable | Разрешать транзакции, если Redis недоступен | ❌ (по умолчанию: true) | boolean |
Примечание: Лимиты использования отслеживаются для каждого адреса кошелька с автоматическим истечением на основе TTL. Когда
fallback_if_unavailableустановлен в true, система разрешает продолжение транзакций, если Redis временно недоступен, предотвращая прерывание работы сервиса. Установкаmax_transactionsв 0 позволит неограниченное количество транзакций.
Методы Kora (опционально)
Раздел [kora.enabled_methods] управляет тем, какие RPC-методы включены. Этот
раздел является опциональным, и по умолчанию все методы включены. Каждый метод
может быть включён или отключён установкой значения true или false:
[kora.enabled_methods]liveness = trueestimate_transaction_fee = trueget_supported_tokens = truesign_transaction = falsesign_and_send_transaction = falsetransfer_transaction = falseget_blockhash = trueget_config = trueget_payer_signer = true
| Параметр | Описание метода | Обязательно | Тип |
|---|---|---|---|
liveness | Эндпоинт проверки работоспособности | ✅ | boolean |
estimate_transaction_fee | Оценка комиссии за транзакцию | ✅ | boolean |
get_supported_tokens | Список принимаемых токенов | ✅ | boolean |
sign_transaction | Подписание транзакции без отправки в сеть | ✅ | boolean |
sign_and_send_transaction | Подписание транзакции и отправка в сеть | ✅ | boolean |
transfer_transaction | Обработка переводов токенов | ✅ | boolean |
get_blockhash | Получение актуального хеша блока | ✅ | boolean |
get_config | Возврат конфигурации сервера Kora | ✅ | boolean |
Примечание: если этот раздел включён в ваш файл
kora.toml, все методы должны быть явно установлены вtrueилиfalse.
Политики валидации
Раздел [validation] определяет правила безопасности и лимиты транзакций,
связанные с Solana:
[validation]max_allowed_lamports = 1000000 # 0.001 SOLmax_signatures = 10price_source = "Jupiter"allow_durable_transactions = false # Block durable nonce transactionsallowed_programs = ["11111111111111111111111111111111", # System Program (required for SOL transfers)"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", # SPL Token Program"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", # Token-2022 Program"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL", # Associated Token Program"AddressLookupTab1e1111111111111111111111111", # Address Lookup Table Program"ComputeBudget11111111111111111111111111111111", # Compute Budget Program]allowed_tokens = ["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", # USDC (mainnet)# additional tokens here]allowed_spl_paid_tokens = ["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", # USDC (mainnet)# additional tokens here]disallowed_accounts = [# "BadActorPubkey11111111111111111111111111111",]
| Параметр | Описание | Обязательно | Тип |
|---|---|---|---|
max_allowed_lamports | Установка максимального количества lamport на транзакцию ограничивает подверженность ноды Kora риску в рамках одной транзакции. | ✅ | number |
max_signatures | Базовые комиссии Solana зависят от количества подписей в транзакции, поэтому установка максимального количества подписей на транзакцию — хороший способ предотвратить чрезмерные траты SOL пользователями на одну транзакцию. | ✅ | number |
price_source | Оракул для данных о ценах токенов. Примечание: При установке в "Jupiter" переменная окружения JUPITER_API_KEY является обязательной. Без неё сервер не запустится. | ✅ | "Jupiter" или "Mock" |
allow_durable_transactions | Разрешение транзакций с durable nonce. См. Соображения безопасности ниже. | ❌ (по умолчанию: false) | boolean |
allowed_programs | Программы Solana, с которыми могут взаимодействовать транзакции | ✅ | Массив строк в кодировке b58 |
allowed_tokens | Минты токенов, которые могут использоваться в транзакциях | ✅ | Массив строк в кодировке b58 |
allowed_spl_paid_tokens | SPL-токены, принимаемые в качестве оплаты комиссий за транзакции | ✅ | Массив строк в кодировке b58 |
disallowed_accounts | Аккаунты, которые явно заблокированы для транзакций | ✅ | Массив строк в кодировке b58 |
Примечание: Пустые массивы допустимы, но вам необходимо указать хотя бы один внесенный в белый список
allowed_programs,allowed_tokens,allowed_spl_paid_tokensчтобы узел Kora мог обрабатывать транзакции. Вам необходимо указать System Program или Token Program, чтобы узел Kora мог обрабатывать переводы. Чтобы включить распространенные типы инструкций (например, Compute Budget, Address Lookup Table), необходимо указать Compute Budget Program или Address Lookup Table Program и т. д.
Безопасность долговечных транзакций
ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ: Долговечные nonce-транзакции позволяют хранить подписанные транзакции неограниченное время и отправлять их позже. Это может быть использовано в качестве вектора экономической атаки, когда кто-то может получить подписанную транзакцию и подождать с её отправкой до наступления благоприятных для себя рыночных условий (например, когда стоимость SOL снизилась или стоимость платежного токена возросла).
По умолчанию allow_durable_transactions установлен в false для блокировки
всех долговечных nonce-транзакций. Включайте эту функцию только в том случае,
если вашему приложению требуются именно долговечные транзакции и вы понимаете
связанные с этим риски.
Если вам необходимо включить долговечные транзакции, рассмотрите:
- Использование аутентификации для ограничения доступа к API
- Внедрение дополнительной валидации вне блокчейна
- Мониторинг необычных паттернов транзакций
- Мониторинг и ограничение балансов аккаунтов подписантов
- Регулярную ротацию ключей подписантов
Узнайте больше о долговечных nonce-транзакциях в документации Solana.
Блокировка расширений Token-2022
Секция [validation.token2022] позволяет блокировать конкретные расширения
Token-2022 для повышения безопасности. По умолчанию все расширения включены. Вы
можете блокировать определенные расширения, добавив их в массивы
blocked_mint_extensions или blocked_account_extensions:
[validation.token2022]blocked_mint_extensions = ["transfer_hook", # Block tokens with transfer hooks"pausable", # Block pausable tokens"permanent_delegate", # Block tokens with permanent delegates]blocked_account_extensions = ["cpi_guard", # Block accounts with CPI guard"memo_transfer", # Block accounts requiring memos]
Доступные расширения минта
| Название расширения | Описание |
|---|---|
confidential_transfer_mint | Конфигурация конфиденциальных переводов для минта |
confidential_mint_burn | Конфигурация конфиденциального создания и сжигания |
transfer_fee_config | Конфигурация комиссии за перевод |
mint_close_authority | Орган, уполномоченный закрывать минт |
interest_bearing_config | Конфигурация токена с процентной ставкой |
non_transferable | Делает токены непередаваемыми |
permanent_delegate | Постоянный делегат для минта |
transfer_hook | Программа пользовательского хука передачи |
pausable | Конфигурация приостанавливаемого токена |
Доступные расширения аккаунта
| Название расширения | Описание |
|---|---|
confidential_transfer_account | Состояние конфиденциальных переводов для аккаунта |
non_transferable_account | Аккаунт непередаваемого токена |
transfer_hook_account | Состояние хука передачи для аккаунта |
pausable_account | Состояние аккаунта приостанавливаемого токена |
memo_transfer | Требуется memo для переводов |
cpi_guard | Предотвращает определённые CPI-вызовы |
immutable_owner | Владелец аккаунта не может быть изменён |
default_account_state | Состояние по умолчанию для новых аккаунтов |
transfer_hook
Соображения безопасности
Расширение PermanentDelegate — токены с этим расширением позволяют делегату переводить/сжигать токены в любое время без одобрения владельца. Это создаёт значительные риски для оператора ноды Kora, поскольку средства оплаты могут быть изъяты после платежа.
- Рассмотрите возможность добавления "permanent_delegate" в
blocked_mint_extensionsв [validation.token2022], если это явно не требуется для вашего случая использования. - Избегайте использования платёжных токенов с расширением
permanent_delegate.
Политика плательщика комиссий
Раздел [validation.fee_payer_policy] обеспечивает детальный контроль над тем,
какие действия может выполнять кошелек плательщика комиссий вашей ноды Kora.
Политика организована по типу программы (System, SPL Token, Token-2022) и
охватывает все различные типы инструкций. Это предотвращает неожиданное
поведение транзакций пользователей, использующих вашу ноду Kora в качестве
подписанта.
Например, если параметр spl_token.allow_transfer установлен в значение
false, нода Kora не будет подписывать транзакции, включающие перевод
SPL-токенов, где плательщик комиссий ноды Kora является авторизующим лицом
перевода.
[validation.fee_payer_policy.system]allow_transfer = false # System Transfer/TransferWithSeedallow_assign = false # System Assign/AssignWithSeedallow_create_account = false # System CreateAccount/CreateAccountWithSeedallow_allocate = false # System Allocate/AllocateWithSeed[validation.fee_payer_policy.system.nonce]allow_initialize = false # InitializeNonceAccountallow_advance = false # AdvanceNonceAccountallow_authorize = false # AuthorizeNonceAccountallow_withdraw = false # WithdrawNonceAccount[validation.fee_payer_policy.spl_token]allow_transfer = false # Transfer/TransferCheckedallow_burn = false # Burn/BurnCheckedallow_close_account = false # CloseAccountallow_approve = false # Approve/ApproveCheckedallow_revoke = false # Revokeallow_set_authority = false # SetAuthorityallow_mint_to = false # MintTo/MintToCheckedallow_initialize_mint = false # InitializeMint/InitializeMint2allow_initialize_account = false # InitializeAccount/InitializeAccount3allow_initialize_multisig = false # InitializeMultisig/InitializeMultisig2allow_freeze_account = false # FreezeAccountallow_thaw_account = false # ThawAccount[validation.fee_payer_policy.token_2022]allow_transfer = false # Transfer/TransferCheckedallow_burn = false # Burn/BurnCheckedallow_close_account = false # CloseAccountallow_approve = false # Approve/ApproveCheckedallow_revoke = false # Revokeallow_set_authority = false # SetAuthorityallow_mint_to = false # MintTo/MintToCheckedallow_initialize_mint = false # InitializeMint/InitializeMint2allow_initialize_account = false # InitializeAccount/InitializeAccount3allow_initialize_multisig = false # InitializeMultisig/InitializeMultisig2allow_freeze_account = false # FreezeAccountallow_thaw_account = false # ThawAccount
Инструкции System Program
| Параметр | Описание | По умолчанию | Тип |
|---|---|---|---|
allow_transfer | Разрешить плательщика комиссий в качестве отправителя в инструкциях Transfer/TransferWithSeed | false | boolean |
allow_assign | Разрешить плательщика комиссий в качестве авторизующего лица в инструкциях Assign/AssignWithSeed | false | boolean |
allow_create_account | Разрешить плательщика комиссий в качестве плательщика финансирования в инструкциях CreateAccount/CreateAccountWithSeed | false | boolean |
allow_allocate | Разрешить плательщика комиссий в качестве владельца аккаунта в инструкциях Allocate/AllocateWithSeed | false | boolean |
nonce.allow_initialize | Разрешить установку плательщика комиссий в качестве nonce-авторизующего лица в InitializeNonceAccount | false | boolean |
nonce.allow_advance | Разрешить плательщика комиссий в качестве авторизующего лица в AdvanceNonceAccount | false | boolean |
nonce.allow_authorize | Разрешить плательщика комиссий в качестве текущего авторизующего лица в AuthorizeNonceAccount | false | boolean |
nonce.allow_withdraw | Разрешить плательщика комиссий в качестве авторизующего лица в WithdrawNonceAccount | false | boolean |
Инструкции SPL Token Program
| Параметр | Описание | По умолчанию | Тип |
|---|---|---|---|
allow_transfer | Разрешить плательщика комиссий в качестве владельца в инструкциях Transfer/TransferChecked | false | boolean |
allow_burn | Разрешить плательщика комиссий в качестве владельца в инструкциях Burn/BurnChecked | false | boolean |
allow_close_account | Разрешить плательщика комиссий в качестве владельца в инструкциях CloseAccount | false | boolean |
allow_approve | Разрешить плательщика комиссий в качестве владельца в инструкциях Approve/ApproveChecked | false | boolean |
allow_revoke | Разрешить плательщика комиссий в качестве владельца в инструкциях Revoke | false | boolean |
allow_set_authority | Разрешить плательщика комиссий в качестве текущего авторизующего лица в инструкциях SetAuthority | false | boolean |
allow_mint_to | Разрешить плательщика комиссий в качестве авторизующего лица mint в инструкциях MintTo/MintToChecked | false | boolean |
allow_initialize_mint | Разрешить плательщика комиссий в качестве авторизующего лица mint в инструкциях InitializeMint/InitializeMint2 | false | boolean |
allow_initialize_account | Разрешить плательщика комиссий в качестве владельца в инструкциях InitializeAccount/InitializeAccount3 | false | boolean |
allow_initialize_multisig | Разрешить плательщика комиссий в качестве подписанта в инструкциях InitializeMultisig/InitializeMultisig2 | false | boolean |
allow_freeze_account | Разрешить плательщика комиссий в качестве авторизующего лица заморозки в инструкциях FreezeAccount | false | boolean |
allow_thaw_account | Разрешить плательщика комиссий в качестве авторизующего лица заморозки в инструкциях ThawAccount | false | boolean |
Token-2022 поддерживает тот же набор инструкций, что и SPL Token, с идентичными
опциями конфигурации (в разделе [validation.fee_payer_policy.token_2022]).
Соображения безопасности
ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ: В целях безопасности рекомендуется установить
все эти параметры в значение false (по умолчанию) и включать только по мере
необходимости. Это предотвратит нежелательное поведение, такое как опустошение
аккаунта вашего плательщика комиссий пользователями или сжигание токенов с
аккаунта вашего плательщика комиссий. Это предотвращает:
- Опустошение аккаунта: Пользователи переводят SOL или токены с аккаунта вашего плательщика комиссий
- Захват прав доступа: Пользователи изменяют права доступа на аккаунтах, принадлежащих вашему плательщику комиссий
- Несанкционированная эмиссия: Пользователи выпускают токены, если ваш плательщик комиссий имеет права на эмиссию
- Манипуляция аккаунтами: Пользователи замораживают, закрывают или модифицируют аккаунты, контролируемые вашим плательщиком комиссий
Рекомендуемая практика: Начните с отключенных разрешений и включайте только минимальный набор, необходимый для вашего конкретного сценария использования.
Конфигурация цен (необязательно)
Раздел [validation.price] определяет, как рассчитываются комиссии за
транзакции. Доступны три модели ценообразования:
- Ценообразование с наценкой (по умолчанию) — Добавление процентной наценки поверх фактических сетевых комиссий (наценка по умолчанию составляет 0.0)
- Фиксированное ценообразование — Взимание фиксированной суммы в определенном токене независимо от сетевых комиссий
- Бесплатное ценообразование — Покрытие всех комиссий за транзакции (без взимания платы с пользователей)
| Параметр | Описание | Обязательно | Тип |
|---|---|---|---|
type | Используемая модель ценообразования | ✅ | "margin", "fixed" или "free" |
margin | Процент наценки, добавляемый к сетевым комиссиям | (когда type — "margin") | number |
amount | Фиксированная сумма для взимания в базовых единицах токена | (когда type — "fixed") | number |
token | Минт токена, в котором взимается плата | (когда type — "fixed") | строка в кодировке b58 |
Маржинальное ценообразование
Добавьте процентную наценку сверх фактических сетевых комиссий:
[validation.price]type = "margin"margin = 0.1 # 10% margin (0.1 = 10%, 1.0 = 100%)
Фиксированное ценообразование
ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ: Фиксированное ценообразование НЕ включает расход плательщика комиссий в взимаемую сумму. Это может позволить пользователям опустошить аккаунт вашего плательщика комиссий, если он не настроен должным образом.
Взимайте фиксированную сумму в определённом токене независимо от сетевых комиссий:
[validation.price]type = "fixed"amount = 1000000 # Amount in token's base unitstoken = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" # USDC mint
Бесплатные транзакции
Оплачивайте все комиссии за транзакции (без взимания платы с пользователей):
[validation.price]type = "free"
Меры безопасности при использовании фиксированного/бесплатного ценообразования
-
Отключите все операции переводов и денежные операции — Предотвратите использование плательщика комиссий в качестве источника в переводах:
[validation.fee_payer_policy.system]allow_transfer = false # Block SOL transfersallow_create_account = false # Block account creation with lamportsallow_allocate = false # Block space allocation[validation.fee_payer_policy.system.nonce]allow_withdraw = false # Block nonce account withdrawals[validation.fee_payer_policy.spl_token] # and for [validation.fee_payer_policy.token_2022]allow_transfer = false # Block SPL transfersallow_burn = false # Block SPL token burningallow_close_account = false # Block SPL token account closures (returns rent)allow_mint_to = false # Block unauthorized SPL token mintingallow_initialize_account = false # Block account initialization -
Включите аутентификацию — Используйте аутентификацию для предотвращения злоупотреблений:
[kora.auth]api_key = "your-secure-api-key"# orhmac_secret = "your-minimum-32-character-hmac-secret" -
Установите консервативные лимиты — Минимизируйте риски:
[validation]max_allowed_lamports = 1000000 # 0.001 SOL maximum
ПРЕДУПРЕЖДЕНИЕ: Особенно опасные операции при использовании фиксированного/бесплатного ценообразования:
allow_mint_to: Может позволить неограниченное создание токенов, если плательщик комиссий имеет полномочия на выпускallow_set_authority: Может передать контроль над критически важными аккаунтами злоумышленникамallow_transfer: Позволяет прямое опустошение токеновых балансов плательщика комиссийallow_close_account: Возвращает rent на аккаунты, контролируемые злоумышленниками
Мониторинг производительности (опционально)
Секция [metrics] настраивает сбор метрик и мониторинг. Эта секция опциональна,
и по умолчанию метрики отключены.
[metrics]enabled = trueendpoint = "/metrics"port = 8080scrape_interval = 60[metrics.fee_payer_balance]enabled = trueexpiry_seconds = 30
| Параметр | Описание | Обязательно | Тип |
|---|---|---|---|
enabled | Включить сбор метрик | ✅ | boolean |
endpoint | Пользовательский путь к эндпоинту метрик | ✅ | string |
port | Порт эндпоинта метрик | ✅ | number |
scrape_interval | Частота опроса Prometheus (секунды) | ✅ | number |
Отслеживание баланса плательщика комиссий
Секция [metrics.fee_payer_balance] настраивает автоматический мониторинг
баланса SOL вашего плательщика комиссий:
| Параметр | Описание | Обязательно | Тип |
|---|---|---|---|
enabled | Включить отслеживание баланса плательщика комиссий | ❌ (по умолчанию: false) | boolean |
expiry_seconds | Интервал фонового отслеживания в секундах | ❌ (по умолчанию: 30) | number |
При включении Kora автоматически отслеживает баланс SOL вашего плательщика
комиссий и предоставляет его через метрику Prometheus
fee_payer_balance_lamports. Это помогает с планированием ресурсов и
оповещением о низком балансе.
http://localhost:{port}/{metrics-endpoint}
→ Справочное руководство по мониторингу Kora
Полный пример
Вот готовая к использованию конфигурация с рекомендациями по безопасности:
# Kora Paymaster Configuration# Last Updated: 2025-08-22[kora]# Rate limiting: 100 requests per second globallyrate_limit = 100# Optional payment address (defaults to signer address(es) if not specified)# payment_address = "YourPaymentAddressPubkey11111111111111111111"[kora.auth]# Authentication (choose based on security needs)# api_key = "kora_live_sk_generate_secure_key_here"hmac_secret = "kora_hmac_minimum_32_character_secret_here"max_timestamp_age = 300# Caching configuration (optional but recommended for production)[kora.cache]enabled = trueurl = "redis://localhost:6379"default_ttl = 300 # 5 minutesaccount_ttl = 60 # 1 minute# Usage limiting (optional, prevents abuse)[kora.usage_limit]enabled = truecache_url = "redis://localhost:6379" # Can share same Redis instance as cachemax_transactions = 100 # Per-wallet limitfallback_if_unavailable = true # Don't block if Redis is down# Disable unnecessary RPC methods for security[kora.enabled_methods]liveness = trueestimate_transaction_fee = trueget_supported_tokens = truesign_transaction = falsesign_and_send_transaction = falsetransfer_transaction = falseget_blockhash = trueget_config = trueget_payer_signer = true[validation]# Use production oracleprice_source = "Jupiter"# Conservative transaction limitsmax_allowed_lamports = 1000000 # 0.001 SOL maxmax_signatures = 10# Block durable nonce transactions (security default)allow_durable_transactions = false# Minimal program allowlist (expand as needed)allowed_programs = ["11111111111111111111111111111111", # System Program"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", # SPL Token"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL", # Associated Token"AddressLookupTab1e1111111111111111111111111", # Address Lookup Table"ComputeBudget11111111111111111111111111111111", # Compute Budget"MyProgram111111111111111111111111111111111",# Add your specific program IDs here]# Production token allowlistallowed_tokens = ["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", # USDC"So11111111111111111111111111111111111111112", # Wrapped SOL"MyToken1111111111111111111111111111111111111111",# Add tokens your application uses]# Payment tokens (only liquid, trusted tokens)allowed_spl_paid_tokens = ["EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", # USDC only]# Known bad actors or compromised addressesdisallowed_accounts = ["BadActor1111111111111111111111111111111111111111",]# Restrictive fee payer policy (recommended for production)[validation.fee_payer_policy.system]allow_transfer = false # Block SOL transfers from fee payerallow_assign = false # Block account ownership changesallow_create_account = false # Block creating accounts with fee payer fundsallow_allocate = false # Block allocating space for fee payer accounts[validation.fee_payer_policy.system.nonce]allow_initialize = false # Block nonce account initializationallow_advance = false # Block nonce advancementallow_authorize = false # Block nonce authority changesallow_withdraw = false # Block nonce withdrawals[validation.fee_payer_policy.spl_token]allow_transfer = false # Critical: Block SPL transfersallow_burn = false # Block token burningallow_close_account = false # Block account closuresallow_approve = false # Block token approvalsallow_revoke = false # Block delegate revocationsallow_set_authority = false # Block authority changesallow_mint_to = false # Block minting operationsallow_initialize_mint = false # Block mint initializationallow_initialize_account = false # Block account initializationallow_initialize_multisig = false # Block multisig initializationallow_freeze_account = false # Block account freezingallow_thaw_account = false # Block account thawing[validation.fee_payer_policy.token_2022]allow_transfer = false # Critical: Block Token2022 transfersallow_burn = false # Block token burningallow_close_account = false # Block account closuresallow_approve = false # Block token approvalsallow_revoke = false # Block delegate revocationsallow_set_authority = false # Block authority changesallow_mint_to = false # Block minting operationsallow_initialize_mint = false # Block mint initializationallow_initialize_account = false # Block account initializationallow_initialize_multisig = false # Block multisig initializationallow_freeze_account = false # Block account freezingallow_thaw_account = false # Block account thawing# Token-2022 extension blocking[validation.token2022]# Block potentially risky mint extensionsblocked_mint_extensions = ["transfer_hook", # Custom transfer logic"pausable", # Can freeze transfers"permanent_delegate", # Permanent control]# Block complex account extensionsblocked_account_extensions = ["cpi_guard", # Restricts composability"memo_transfer", # Requires additional data]# Sustainable pricing with 15% margin[validation.price]type = "margin"margin = 0.15 # 15% margin on network fees# Metrics collection[metrics]enabled = trueendpoint = "/metrics"port = 8080scrape_interval = 60# Fee payer balance monitoring[metrics.fee_payer_balance]enabled = trueexpiry_seconds = 30
Проверка конфигурации
Kora проверяет вашу конфигурацию при запуске. Если вы хотите проверить конфигурацию без запуска сервера, используйте команду проверки конфигурации:
kora --config kora.toml config validate # or validate-with-rpc
Вы также можете выполнить команду validate-with-rpc для проверки конфигурации
с RPC-сервером (эта проверка немного медленнее, но выполняет более тщательную
проверку аккаунтов)
Запуск сервера
После настройки файла kora.toml вы можете запустить сервер Kora:
kora --config path/to/kora.toml rpc start --no-load-signer # --other-rpc-flags-here
Флаг --no-load-signer инициализирует сервер без загрузки подписантов. Это
полезно для тестирования конфигурации. Для загрузки подписантов необходимо
настроить файл signers.toml. Минимальная конфигурация с одним подписантом
будет выглядеть так:
[signer_pool]# Selection strategy: round_robin, random, weightedstrategy = "round_robin"# Primary memory signer[[signers]]name = "my-signer"type = "memory"private_key_env = "MY_SIGNER_PRIVATE_KEY"
Это загрузит одного подписанта из переменной окружения MY_SIGNER_PRIVATE_KEY.
Затем вы можете запустить сервер командой:
kora --config path/to/kora.toml rpc start --signers-config path/to/signers.toml
Для получения дополнительной информации и расширенной настройки подписантов см. Руководство по подписантам.
Лучшие практики
- Начните с ограничений: Начните с жестких лимитов и постепенно расширяйте их
- Отслеживайте использование: Контролируйте, какие программы и токены фактически используются
- Регулярные обновления: Просматривайте и обновляйте списки блокировки и лимиты
- Тестируйте изменения: Проверяйте изменения конфигурации сначала в тестовой среде
- Управление версиями: Ведите журнал изменений вашей конфигурации
Нужна помощь?
- Ознакомьтесь с Руководством по аутентификации для настройки аутентификации
- Ознакомьтесь с Руководством по подписантам для настройки подписантов
- Ознакомьтесь с Руководством оператора для получения дополнительной информации о том, как запустить узел Kora
- Посетите Solana Stack Exchange с тегом
kora - Сообщайте о проблемах на GitHub
Is this page helpful?