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

Використовуєте Kora v2.2.0-beta? Дивіться Конфігурацію бета-версії для нових опцій: пакети Jito, захист Lighthouse, reCAPTCHA та обмеження використання.

Ваш вузол Kora підписуватиме транзакції для ваших користувачів, тому важливо налаштувати його так, щоб він підписував лише транзакції, які відповідають вашим бізнес-вимогам. Kora надає вам велику гнучкість у налаштуванні вашого вузла, але важливо розуміти наслідки вашої конфігурації. kora.toml є центром керування конфігурацією Kora. Цей документ надає вичерпний довідник з налаштування вашого вузла платника Kora через конфігураційний файл 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Глобальне обмеження швидкості (запитів на секунду) для всіх клієнтівчисло
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-ключ для простої автентифікаціїрядок
hmac_secretHMAC-секрет для автентифікації на основі підпису (мін. 32 символи)рядок
max_timestamp_ageМаксимальний вік мітки часу HMAC у секундах❌ (за замовчуванням: 300)число

Примітка: 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)логічний
urlURL підключення до Redis (обов'язковий при увімкненні)рядок
default_ttlTTL за замовчуванням для кешованих записів у секундах❌ (за замовчуванням: 300)число
account_ttlTTL для кешу даних облікових записів у секундах❌ (за замовчуванням: 60)число

Примітка: Коли кешування увімкнено, екземпляр 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Дозволити транзакції з довготривалим 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
]

Доступні розширення Mint

Назва розширенняОпис
confidential_transfer_mintКонфігурація конфіденційного переказу для mint
confidential_mint_burnКонфігурація конфіденційного карбування та спалювання
transfer_fee_configКонфігурація комісії за переказ
mint_close_authorityПовноваження на закриття mint
interest_bearing_configКонфігурація токена з нарахуванням відсотків
non_transferableРобить токени непередаваними
permanent_delegateПостійний делегат для mint
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Дозволити платника комісій як уповноваженого на карбування в інструкціях MintTo/MintToCheckedfalseboolean
allow_initialize_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")число
amountФіксована сума для стягнення в базових одиницях токена(коли type дорівнює "fixed")число
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.
Всі права захищені.
Залишайтеся на зв'язку