Конфигурация

Используете 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.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 = 100
payment_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_keyAPI-ключ для простой аутентификацииstring
hmac_secretHMAC-секрет для аутентификации на основе подписи (минимум 32 символа)string
max_timestamp_ageМаксимальный возраст метки времени HMAC в секундах❌ (по умолчанию: 300)number

Примечание: api_key и hmac_secret устанавливают глобальную политику аутентификации для всех клиентов. Для подробной настройки аутентификации см. Руководство по аутентификации.

Кэширование Kora (необязательно)

Раздел [kora.cache] настраивает кэширование на основе Redis для вызовов Solana RPC. Это может значительно повысить производительность за счет уменьшения избыточных запросов данных аккаунтов:

[kora.cache]
enabled = true # Enable/disable caching
url = "redis://localhost:6379" # Redis connection URL
default_ttl = 300 # Default TTL in seconds (5 minutes)
account_ttl = 60 # Account data TTL in seconds (1 minute)
ПараметрОписаниеОбязательныйТип
enabledВключить кэширование Redis для RPC-вызовов❌ (по умолчанию: false)boolean
urlURL подключения к Redis (обязательно при включении)string
default_ttlTTL по умолчанию для кэшированных записей в секундах❌ (по умолчанию: 300)number
account_ttlTTL для кэша данных аккаунтов в секундах❌ (по умолчанию: 60)number

Примечание: При включенном кэшировании экземпляр Redis должен быть доступен по указанному URL. Кэш корректно переключается на прямые RPC-вызовы, если Redis недоступен.

Лимиты использования Kora (опционально)

Раздел [kora.usage_limit] настраивает ограничение транзакций для каждого кошелька, чтобы предотвратить злоупотребления и обеспечить справедливое использование для всех пользователей. Это также можно использовать для создания программ вознаграждений, субсидирующих комиссии за транзакции пользователей до определённого лимита.

Важно: В настоящее время единственной формой ограничения использования, поддерживаемой Kora, является постоянный лимит. Как только кошелёк достигает своего лимита транзакций, он не может быть сброшен, и пользователь больше не сможет отправлять транзакции, используя тот же кошелёк. Этот лимит сохраняется до тех пор, пока не будет вручную очищен из Redis или данные Redis не будут сброшены.

Примечание: Эта функция требует Redis при включении на нескольких экземплярах Kora:

[kora.usage_limit]
enabled = true # Enable/disable usage limiting
cache_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_urlURL подключения 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 = true
estimate_transaction_fee = true
get_supported_tokens = true
sign_transaction = false
sign_and_send_transaction = false
transfer_transaction = false
get_blockhash = true
get_config = true
get_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Возврат конфигурации сервера Koraboolean

Примечание: если этот раздел включён в ваш файл kora.toml, все методы должны быть явно установлены в true или false.

Политики валидации

Раздел [validation] определяет правила безопасности и лимиты транзакций, связанные с Solana:

[validation]
max_allowed_lamports = 1000000 # 0.001 SOL
max_signatures = 10
price_source = "Jupiter"
allow_durable_transactions = false # Block durable nonce transactions
allowed_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_tokensSPL-токены, принимаемые в качестве оплаты комиссий за транзакцииМассив строк в кодировке 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/TransferWithSeed
allow_assign = false # System Assign/AssignWithSeed
allow_create_account = false # System CreateAccount/CreateAccountWithSeed
allow_allocate = false # System Allocate/AllocateWithSeed
[validation.fee_payer_policy.system.nonce]
allow_initialize = false # InitializeNonceAccount
allow_advance = false # AdvanceNonceAccount
allow_authorize = false # AuthorizeNonceAccount
allow_withdraw = false # WithdrawNonceAccount
[validation.fee_payer_policy.spl_token]
allow_transfer = false # Transfer/TransferChecked
allow_burn = false # Burn/BurnChecked
allow_close_account = false # CloseAccount
allow_approve = false # Approve/ApproveChecked
allow_revoke = false # Revoke
allow_set_authority = false # SetAuthority
allow_mint_to = false # MintTo/MintToChecked
allow_initialize_mint = false # InitializeMint/InitializeMint2
allow_initialize_account = false # InitializeAccount/InitializeAccount3
allow_initialize_multisig = false # InitializeMultisig/InitializeMultisig2
allow_freeze_account = false # FreezeAccount
allow_thaw_account = false # ThawAccount
[validation.fee_payer_policy.token_2022]
allow_transfer = false # Transfer/TransferChecked
allow_burn = false # Burn/BurnChecked
allow_close_account = false # CloseAccount
allow_approve = false # Approve/ApproveChecked
allow_revoke = false # Revoke
allow_set_authority = false # SetAuthority
allow_mint_to = false # MintTo/MintToChecked
allow_initialize_mint = false # InitializeMint/InitializeMint2
allow_initialize_account = false # InitializeAccount/InitializeAccount3
allow_initialize_multisig = false # InitializeMultisig/InitializeMultisig2
allow_freeze_account = false # FreezeAccount
allow_thaw_account = false # ThawAccount

Инструкции System Program

ПараметрОписаниеПо умолчаниюТип
allow_transferРазрешить плательщика комиссий в качестве отправителя в инструкциях Transfer/TransferWithSeedfalseboolean
allow_assignРазрешить плательщика комиссий в качестве авторизующего лица в инструкциях Assign/AssignWithSeedfalseboolean
allow_create_accountРазрешить плательщика комиссий в качестве плательщика финансирования в инструкциях CreateAccount/CreateAccountWithSeedfalseboolean
allow_allocateРазрешить плательщика комиссий в качестве владельца аккаунта в инструкциях Allocate/AllocateWithSeedfalseboolean
nonce.allow_initializeРазрешить установку плательщика комиссий в качестве nonce-авторизующего лица в InitializeNonceAccountfalseboolean
nonce.allow_advanceРазрешить плательщика комиссий в качестве авторизующего лица в AdvanceNonceAccountfalseboolean
nonce.allow_authorizeРазрешить плательщика комиссий в качестве текущего авторизующего лица в AuthorizeNonceAccountfalseboolean
nonce.allow_withdrawРазрешить плательщика комиссий в качестве авторизующего лица в WithdrawNonceAccountfalseboolean

Инструкции SPL Token Program

ПараметрОписаниеПо умолчаниюТип
allow_transferРазрешить плательщика комиссий в качестве владельца в инструкциях Transfer/TransferCheckedfalseboolean
allow_burnРазрешить плательщика комиссий в качестве владельца в инструкциях Burn/BurnCheckedfalseboolean
allow_close_accountРазрешить плательщика комиссий в качестве владельца в инструкциях CloseAccountfalseboolean
allow_approveРазрешить плательщика комиссий в качестве владельца в инструкциях Approve/ApproveCheckedfalseboolean
allow_revokeРазрешить плательщика комиссий в качестве владельца в инструкциях Revokefalseboolean
allow_set_authorityРазрешить плательщика комиссий в качестве текущего авторизующего лица в инструкциях SetAuthorityfalseboolean
allow_mint_toРазрешить плательщика комиссий в качестве авторизующего лица mint в инструкциях MintTo/MintToCheckedfalseboolean
allow_initialize_mintРазрешить плательщика комиссий в качестве авторизующего лица mint в инструкциях InitializeMint/InitializeMint2falseboolean
allow_initialize_accountРазрешить плательщика комиссий в качестве владельца в инструкциях InitializeAccount/InitializeAccount3falseboolean
allow_initialize_multisigРазрешить плательщика комиссий в качестве подписанта в инструкциях InitializeMultisig/InitializeMultisig2falseboolean
allow_freeze_accountРазрешить плательщика комиссий в качестве авторизующего лица заморозки в инструкциях FreezeAccountfalseboolean
allow_thaw_accountРазрешить плательщика комиссий в качестве авторизующего лица заморозки в инструкциях ThawAccountfalseboolean

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 units
token = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" # USDC mint

Бесплатные транзакции

Оплачивайте все комиссии за транзакции (без взимания платы с пользователей):

[validation.price]
type = "free"

Меры безопасности при использовании фиксированного/бесплатного ценообразования

  1. Отключите все операции переводов и денежные операции — Предотвратите использование плательщика комиссий в качестве источника в переводах:

    [validation.fee_payer_policy.system]
    allow_transfer = false # Block SOL transfers
    allow_create_account = false # Block account creation with lamports
    allow_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 transfers
    allow_burn = false # Block SPL token burning
    allow_close_account = false # Block SPL token account closures (returns rent)
    allow_mint_to = false # Block unauthorized SPL token minting
    allow_initialize_account = false # Block account initialization
  2. Включите аутентификацию — Используйте аутентификацию для предотвращения злоупотреблений:

    [kora.auth]
    api_key = "your-secure-api-key"
    # or
    hmac_secret = "your-minimum-32-character-hmac-secret"
  3. Установите консервативные лимиты — Минимизируйте риски:

    [validation]
    max_allowed_lamports = 1000000 # 0.001 SOL maximum

ПРЕДУПРЕЖДЕНИЕ: Особенно опасные операции при использовании фиксированного/бесплатного ценообразования:

  • allow_mint_to: Может позволить неограниченное создание токенов, если плательщик комиссий имеет полномочия на выпуск
  • allow_set_authority: Может передать контроль над критически важными аккаунтами злоумышленникам
  • allow_transfer: Позволяет прямое опустошение токеновых балансов плательщика комиссий
  • allow_close_account: Возвращает rent на аккаунты, контролируемые злоумышленниками

Мониторинг производительности (опционально)

Секция [metrics] настраивает сбор метрик и мониторинг. Эта секция опциональна, и по умолчанию метрики отключены.

[metrics]
enabled = true
endpoint = "/metrics"
port = 8080
scrape_interval = 60
[metrics.fee_payer_balance]
enabled = true
expiry_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 globally
rate_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 = true
url = "redis://localhost:6379"
default_ttl = 300 # 5 minutes
account_ttl = 60 # 1 minute
# Usage limiting (optional, prevents abuse)
[kora.usage_limit]
enabled = true
cache_url = "redis://localhost:6379" # Can share same Redis instance as cache
max_transactions = 100 # Per-wallet limit
fallback_if_unavailable = true # Don't block if Redis is down
# Disable unnecessary RPC methods for security
[kora.enabled_methods]
liveness = true
estimate_transaction_fee = true
get_supported_tokens = true
sign_transaction = false
sign_and_send_transaction = false
transfer_transaction = false
get_blockhash = true
get_config = true
get_payer_signer = true
[validation]
# Use production oracle
price_source = "Jupiter"
# Conservative transaction limits
max_allowed_lamports = 1000000 # 0.001 SOL max
max_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 allowlist
allowed_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 addresses
disallowed_accounts = [
"BadActor1111111111111111111111111111111111111111",
]
# Restrictive fee payer policy (recommended for production)
[validation.fee_payer_policy.system]
allow_transfer = false # Block SOL transfers from fee payer
allow_assign = false # Block account ownership changes
allow_create_account = false # Block creating accounts with fee payer funds
allow_allocate = false # Block allocating space for fee payer accounts
[validation.fee_payer_policy.system.nonce]
allow_initialize = false # Block nonce account initialization
allow_advance = false # Block nonce advancement
allow_authorize = false # Block nonce authority changes
allow_withdraw = false # Block nonce withdrawals
[validation.fee_payer_policy.spl_token]
allow_transfer = false # Critical: Block SPL transfers
allow_burn = false # Block token burning
allow_close_account = false # Block account closures
allow_approve = false # Block token approvals
allow_revoke = false # Block delegate revocations
allow_set_authority = false # Block authority changes
allow_mint_to = false # Block minting operations
allow_initialize_mint = false # Block mint initialization
allow_initialize_account = false # Block account initialization
allow_initialize_multisig = false # Block multisig initialization
allow_freeze_account = false # Block account freezing
allow_thaw_account = false # Block account thawing
[validation.fee_payer_policy.token_2022]
allow_transfer = false # Critical: Block Token2022 transfers
allow_burn = false # Block token burning
allow_close_account = false # Block account closures
allow_approve = false # Block token approvals
allow_revoke = false # Block delegate revocations
allow_set_authority = false # Block authority changes
allow_mint_to = false # Block minting operations
allow_initialize_mint = false # Block mint initialization
allow_initialize_account = false # Block account initialization
allow_initialize_multisig = false # Block multisig initialization
allow_freeze_account = false # Block account freezing
allow_thaw_account = false # Block account thawing
# Token-2022 extension blocking
[validation.token2022]
# Block potentially risky mint extensions
blocked_mint_extensions = [
"transfer_hook", # Custom transfer logic
"pausable", # Can freeze transfers
"permanent_delegate", # Permanent control
]
# Block complex account extensions
blocked_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 = true
endpoint = "/metrics"
port = 8080
scrape_interval = 60
# Fee payer balance monitoring
[metrics.fee_payer_balance]
enabled = true
expiry_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, weighted
strategy = "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

Для получения дополнительной информации и расширенной настройки подписантов см. Руководство по подписантам.

Лучшие практики

  1. Начните с ограничений: Начните с жестких лимитов и постепенно расширяйте их
  2. Отслеживайте использование: Контролируйте, какие программы и токены фактически используются
  3. Регулярные обновления: Просматривайте и обновляйте списки блокировки и лимиты
  4. Тестируйте изменения: Проверяйте изменения конфигурации сначала в тестовой среде
  5. Управление версиями: Ведите журнал изменений вашей конфигурации

Нужна помощь?

Is this page helpful?

Содержание

Редактировать страницу

Управляется

© 2026 Solana Foundation.
Все права защищены.
Связаться с нами