Використовуєте 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 - Основні налаштування сервера
- Автентифікація 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 | Глобальне обмеження швидкості (запитів на секунду) для всіх клієнтів | ✅ | число |
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-ключ для простої автентифікації | ❌ | рядок |
hmac_secret | HMAC-секрет для автентифікації на основі підпису (мін. 32 символи) | ❌ | рядок |
max_timestamp_age | Максимальний вік мітки часу HMAC у секундах | ❌ (за замовчуванням: 300) | число |
Примітка:
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) | логічний |
url | URL підключення до Redis (обов'язковий при увімкненні) | ✅ | рядок |
default_ttl | TTL за замовчуванням для кешованих записів у секундах | ❌ (за замовчуванням: 300) | число |
account_ttl | TTL для кешу даних облікових записів у секундах | ❌ (за замовчуванням: 60) | число |
Примітка: Коли кешування увімкнено, екземпляр 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 | Дозволити транзакції з довготривалим 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]
Доступні розширення 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/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 | Дозволити платника комісій як уповноваженого на карбування в інструкціях MintTo/MintToChecked | false | boolean |
allow_initialize_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") | число |
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 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 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?