Usando Kora v2.2.0-beta? Consulte Configuração Beta para novas opções: Pacotes Jito, proteção Lighthouse, reCAPTCHA e limites de uso.
O seu nó Kora estará assinando transações para os seus usuários, portanto é
importante configurá-lo para assinar apenas transações que atendam aos seus
requisitos de negócio. O Kora oferece muita flexibilidade na forma como você
configura o seu nó, mas é importante entender as implicações da sua
configuração. kora.toml é o centro de controle para a sua configuração do
Kora. Este documento fornece uma referência abrangente para configurar o seu nó
pagador Kora através do arquivo de configuração kora.toml.
Visão Geral
O arquivo kora.toml controla todos os aspectos do comportamento do seu nó
Kora, incluindo:
- Limitação de taxa e autenticação
- Disponibilidade de métodos RPC
- Regras de validação de transação
- Modelos de precificação de taxas
- Políticas de segurança
- Disponibilidade de métodos RPC
- Modelos de precificação de taxas
- Configuração de endereço de pagamento
- Monitoramento de desempenho
O seu arquivo de configuração deve ser colocado no seu diretório de implantação
ou especificado através do sinalizador --config ao iniciar o servidor.
Seções de Configuração
O arquivo kora.toml está organizado em seções, cada uma com seu próprio
conjunto de opções. Este guia explica cada seção e as opções disponíveis:
- Políticas Principais do Kora - Configurações principais do servidor
- Autenticação do Kora - Configurações de autenticação
- Cache do Kora - Cache Redis para chamadas RPC
- Limites de Uso do Kora - Limitação de transações por carteira
- Métodos Habilitados do Kora - Métodos RPC do Kora a habilitar
- Políticas de Validação - Validação de transação e segurança
- Bloqueio de Extensão Token-2022 - Bloquear extensões Token-2022 de risco
- Política do Pagador de Taxa - Restrições na carteira do pagador de taxa
- Configuração de Preço - Modelos de precificação de taxa de transação
- Monitoramento de Desempenho - Coleta de métricas e monitoramento
- Exemplo Completo - Configuração completa pronta para produção
Exemplos de seções do arquivo 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
Políticas Principais do Kora
A seção [kora] configura o comportamento principal do servidor:
[kora]rate_limit = 100payment_address = "YourPaymentAddressPubkey11111111111111111111" # Optional
| Opção | Descrição | Obrigatório | Tipo |
|---|---|---|---|
rate_limit | Limite de taxa global (solicitações por segundo) em todos os clientes | ✅ | number |
payment_address | Endereço de pagamento opcional para receber tokens de pagamento (padrão é o(s) endereço(s) do signatário se não especificado) | ❌ | string codificada em b58 |
Autenticação do Kora
A seção [kora.auth] configura a autenticação para o servidor Kora:
[kora.auth]api_key = "kora_live_sk_1234567890abcdef"hmac_secret = "kora_hmac_your-strong-hmac-secret-key-here"max_timestamp_age = 300
| Opção | Descrição | Obrigatório | Tipo |
|---|---|---|---|
api_key | Chave de API para autenticação simples | ❌ | string |
hmac_secret | Segredo HMAC para autenticação baseada em assinatura (mínimo 32 caracteres) | ❌ | string |
max_timestamp_age | Idade máxima de um carimbo de data/hora HMAC em segundos | ❌ (padrão: 300) | number |
Nota:
api_keyehmac_secretdefinem uma política de autenticação global para todos os clientes. Para configuração detalhada de autenticação, consulte o Guia de Autenticação.
Cache do Kora (opcional)
A seção [kora.cache] configura o cache baseado em Redis para chamadas RPC do
Solana. Isso pode melhorar significativamente o desempenho ao reduzir buscas
redundantes de dados de contas:
[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)
| Opção | Descrição | Obrigatório | Tipo |
|---|---|---|---|
enabled | Habilitar cache Redis para chamadas RPC | ❌ (padrão: false) | boolean |
url | URL de conexão do Redis (obrigatório quando habilitado) | ✅ | string |
default_ttl | TTL padrão para entradas em cache em segundos | ❌ (padrão: 300) | number |
account_ttl | TTL para cache de dados de contas em segundos | ❌ (padrão: 60) | number |
Nota: Quando o cache está habilitado, uma instância Redis deve estar disponível na URL especificada. O cache recorre automaticamente a chamadas RPC diretas se o Redis estiver indisponível.
Limites de Uso do Kora (opcional)
A seção [kora.usage_limit] configura a limitação de transações por carteira
para prevenir abusos e garantir uso justo entre seus usuários. Isso também pode
ser usado para criar programas de recompensas para subsidiar as taxas de
transação dos usuários até um determinado limite.
Importante: Atualmente, a única forma de limitação de uso suportada pelo Kora é um limite permanente. Uma vez que uma carteira atinge seu limite de transações, ele não pode ser redefinido e o usuário não poderá mais enviar transações usando essa mesma carteira. Este limite persiste até ser removido manualmente do Redis ou os dados do Redis serem redefinidos.
Nota: Este recurso requer Redis quando habilitado em múltiplas instâncias do 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
| Opção | Descrição | Obrigatório | Tipo |
|---|---|---|---|
enabled | Habilitar limitação de transações por carteira | ❌ (padrão: false) | boolean |
cache_url | URL de conexão Redis para rastreamento de uso compartilhado | ❌ | string |
max_transactions | Máximo de transações por carteira (0 = ilimitado) | ❌ (padrão: 100) | number |
fallback_if_unavailable | Permitir transações se o Redis estiver indisponível | ❌ (padrão: true) | boolean |
Nota: Os limites de uso são rastreados por endereço de carteira com expiração automática baseada em TTL. Quando
fallback_if_unavailableestá definido como true, o sistema permite que as transações prossigam se o Redis estiver temporariamente indisponível, prevenindo interrupção do serviço. Definirmax_transactionscomo 0 permitirá transações ilimitadas.
Métodos Habilitados do Kora (opcional)
A seção [kora.enabled_methods] controla quais métodos RPC estão habilitados.
Esta seção é opcional e, por padrão, todos os métodos estão habilitados. Cada
método pode ser habilitado ou desabilitado definindo o valor como true ou
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
| Opção | Descrição do Método | Obrigatório | Tipo |
|---|---|---|---|
liveness | Endpoint de verificação de integridade | ✅ | boolean |
estimate_transaction_fee | Estimar a taxa de uma transação | ✅ | boolean |
get_supported_tokens | Listar tokens aceitos | ✅ | boolean |
sign_transaction | Assinar uma transação sem enviá-la à rede | ✅ | boolean |
sign_and_send_transaction | Assinar uma transação e enviá-la à rede | ✅ | boolean |
transfer_transaction | Gerenciar transferências de tokens | ✅ | boolean |
get_blockhash | Obter um blockhash recente | ✅ | boolean |
get_config | Retornar a configuração do servidor Kora | ✅ | boolean |
Nota: se esta seção estiver incluída no seu arquivo
kora.toml, todos os métodos devem ser explicitamente definidos comotrueoufalse.
Políticas de Validação
A seção [validation] define regras de segurança relacionadas ao Solana e
limites de transação:
[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",]
| Opção | Descrição | Obrigatório | Tipo |
|---|---|---|---|
max_allowed_lamports | Definir um número máximo de lamports por transação limita a exposição do nó Kora a uma única transação. | ✅ | number |
max_signatures | As taxas base do Solana são uma função do número de assinaturas em uma transação, portanto, definir um número máximo de assinaturas por transação é uma boa maneira de evitar que os usuários gastem muito SOL em uma única transação. | ✅ | number |
price_source | Oráculo para dados de preços de tokens. Nota: Quando definido como "Jupiter", a variável de ambiente JUPITER_API_KEY é obrigatória. O servidor falhará ao iniciar sem ela. | ✅ | "Jupiter" ou "Mock" |
allow_durable_transactions | Permitir transações com nonce durável. Consulte Considerações de Segurança abaixo. | ❌ (padrão: false) | boolean |
allowed_programs | Programas Solana com os quais as transações podem interagir | ✅ | Array de string codificada em b58 |
allowed_tokens | Mints de tokens que podem ser usados em transações | ✅ | Array de string codificada em b58 |
allowed_spl_paid_tokens | Tokens SPL aceitos como pagamento para taxas de transação | ✅ | Array de string codificada em b58 |
disallowed_accounts | Contas que são explicitamente bloqueadas de transações | ✅ | Array de string codificada em b58 |
Nota: Arrays vazios são permitidos, mas você precisará especificar pelo menos um
allowed_programs,allowed_tokens,allowed_spl_paid_tokensna lista de permissões para que o nó Kora possa processar transações. Você precisa especificar o System Program ou Token Program para que o nó Kora possa processar transferências. Para habilitar tipos de instruções comuns (por exemplo, Compute Budget, Address Lookup Table), você precisa especificar o Compute Budget Program ou Address Lookup Table Program, etc.
Segurança de Transações Duráveis
AVISO DE SEGURANÇA: Transações com nonce durável permitem que transações assinadas sejam mantidas indefinidamente e enviadas posteriormente. Isso pode ser usado como um vetor de ataque econômico onde alguém poderia obter uma transação assinada e esperar para enviá-la até que as condições de mercado sejam favoráveis a eles (por exemplo, quando o valor do SOL tenha caído ou o valor do token de pagamento tenha aumentado).
Por padrão, allow_durable_transactions está definido como false para
bloquear todas as transações com nonce durável. Habilite isso apenas se sua
aplicação especificamente requer transações duráveis e você compreende os
riscos.
Se você deve habilitar transações duráveis, considere:
- Usar autenticação para restringir o acesso à API
- Implementar validação off-chain adicional
- Monitorar padrões de transações incomuns
- Monitorar e limitar saldos de contas de assinantes
- Rotacionar chaves de assinantes regularmente
Saiba mais sobre transações com nonce durável na Documentação Solana.
Bloqueio de Extensões Token-2022
A seção [validation.token2022] permite que você bloqueie extensões específicas
do Token-2022 para segurança aprimorada. Todas as extensões estão habilitadas
por padrão. Você pode bloquear extensões específicas adicionando-as aos arrays
blocked_mint_extensions ou 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]
Extensões de Mint Disponíveis
| Nome da Extensão | Descrição |
|---|---|
confidential_transfer_mint | Configuração de transferência confidencial para o mint |
confidential_mint_burn | Configuração de mint e queima confidencial |
transfer_fee_config | Configuração de taxa de transferência |
mint_close_authority | Autoridade permitida para fechar o mint |
interest_bearing_config | Configuração de token com rendimento de juros |
non_transferable | Torna os tokens não transferíveis |
permanent_delegate | Delegado permanente para o mint |
transfer_hook | Programa de hook de transferência personalizado |
pausable | Configuração de token pausável |
Extensões de Conta Disponíveis
| Nome da Extensão | Descrição |
|---|---|
confidential_transfer_account | Estado de transferência confidencial para a conta |
non_transferable_account | Conta de token não transferível |
transfer_hook_account | Estado do hook de transferência para a conta |
pausable_account | Estado da conta de token pausável |
memo_transfer | Requer memo para transferências |
cpi_guard | Impede certas chamadas CPI |
immutable_owner | O proprietário da conta não pode ser alterado |
default_account_state | Estado padrão para novas contas |
transfer_hook
Considerações de Segurança
Extensão PermanentDelegate - Tokens com esta extensão permitem que o delegado transfira/queime tokens a qualquer momento sem aprovação do proprietário. Isto cria riscos significativos para o operador do nó Kora, pois os fundos de pagamento podem ser apreendidos após o pagamento.
- Considere adicionar "permanent_delegate" a
blocked_mint_extensionsem [validation.token2022] a menos que seja explicitamente necessário para o seu caso de uso. - Evite usar tokens de pagamento com a extensão
permanent_delegate.
Política do Pagador de Taxas
A seção [validation.fee_payer_policy] fornece controle granular sobre quais
ações a carteira do pagador de taxas do seu nó Kora pode executar. A política
está organizada por tipo de programa (System, SPL Token, Token-2022) e cobre
todos os diferentes tipos de instruções. Isso impede comportamentos inesperados
de transações de usuários que utilizam seu nó Kora como signatário.
Por exemplo, se spl_token.allow_transfer estiver definido como false, o nó
Kora não assinará transações que incluam uma transferência de token SPL onde o
pagador de taxas do nó Kora seja a autoridade de transferência.
[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
Instruções do System Program
| Opção | Descrição | Padrão | Tipo |
|---|---|---|---|
allow_transfer | Permitir pagador de taxas como remetente nas instruções Transfer/TransferWithSeed | false | boolean |
allow_assign | Permitir pagador de taxas como autoridade nas instruções Assign/AssignWithSeed | false | boolean |
allow_create_account | Permitir pagador de taxas como financiador nas instruções CreateAccount/CreateAccountWithSeed | false | boolean |
allow_allocate | Permitir pagador de taxas como proprietário da conta nas instruções Allocate/AllocateWithSeed | false | boolean |
nonce.allow_initialize | Permitir que o pagador de taxas seja definido como autoridade nonce em InitializeNonceAccount | false | boolean |
nonce.allow_advance | Permitir pagador de taxas como autoridade em AdvanceNonceAccount | false | boolean |
nonce.allow_authorize | Permitir pagador de taxas como autoridade atual em AuthorizeNonceAccount | false | boolean |
nonce.allow_withdraw | Permitir pagador de taxas como autoridade em WithdrawNonceAccount | false | boolean |
Instruções do SPL Token Program
| Opção | Descrição | Padrão | Tipo |
|---|---|---|---|
allow_transfer | Permitir pagador de taxas como proprietário nas instruções Transfer/TransferChecked | false | boolean |
allow_burn | Permitir pagador de taxas como proprietário nas instruções Burn/BurnChecked | false | boolean |
allow_close_account | Permitir pagador de taxas como proprietário nas instruções CloseAccount | false | boolean |
allow_approve | Permitir pagador de taxas como proprietário nas instruções Approve/ApproveChecked | false | boolean |
allow_revoke | Permitir pagador de taxas como proprietário nas instruções Revoke | false | boolean |
allow_set_authority | Permitir pagador de taxas como autoridade atual nas instruções SetAuthority | false | boolean |
allow_mint_to | Permitir pagador de taxas como autoridade de cunhagem nas instruções MintTo/MintToChecked | false | boolean |
allow_initialize_mint | Permitir pagador de taxas como autoridade de cunhagem nas instruções InitializeMint/InitializeMint2 | false | boolean |
allow_initialize_account | Permitir pagador de taxas como proprietário nas instruções InitializeAccount/InitializeAccount3 | false | boolean |
allow_initialize_multisig | Permitir pagador de taxas como signatário nas instruções InitializeMultisig/InitializeMultisig2 | false | boolean |
allow_freeze_account | Permitir pagador de taxas como autoridade de congelamento nas instruções FreezeAccount | false | boolean |
allow_thaw_account | Permitir pagador de taxas como autoridade de congelamento nas instruções ThawAccount | false | boolean |
Token-2022 suporta o mesmo conjunto de instruções que o SPL Token com opções de
configuração idênticas (na seção [validation.fee_payer_policy.token_2022]).
Considerações de Segurança
AVISO DE SEGURANÇA: Por razões de segurança, recomenda-se definir todas
essas opções como false (padrão) e habilitar apenas conforme necessário. Isso
impedirá comportamentos indesejados, como usuários esgotando sua conta de
pagador de taxas ou queimando tokens da sua conta de pagador de taxas. Isso
previne:
- Drenagem de Conta: Usuários transferindo SOL ou tokens da sua conta de pagador de taxas
- Tomada de Autoridade: Usuários alterando autoridades em contas pertencentes ao seu pagador de taxas
- Cunhagem Não Autorizada: Usuários cunhando tokens se o seu pagador de taxas tiver autoridade de cunhagem
- Manipulação de Conta: Usuários congelando, fechando ou modificando contas controladas pelo seu pagador de taxas
Melhor Prática: Comece com todas as permissões desabilitadas e habilite apenas o conjunto mínimo necessário para o seu caso de uso específico.
Configuração de Preços (opcional)
A seção [validation.price] define como as taxas de transação são calculadas.
Três modelos de precificação estão disponíveis:
- Precificação com Margem (padrão) - Adiciona uma margem percentual sobre as taxas reais da rede (margem padrão é 0.0)
- Precificação Fixa - Cobra um valor fixo em um token específico, independentemente das taxas da rede
- Precificação Gratuita - Patrocina todas as taxas de transação (sem cobrança aos usuários)
| Opção | Descrição | Obrigatório | Tipo |
|---|---|---|---|
type | Modelo de precificação a usar | ✅ | "margin", "fixed" ou "free" |
margin | Percentual de margem a adicionar às taxas da rede | (quando type é "margin") | número |
amount | Valor fixo a cobrar nas unidades base do token | (quando type é "fixed") | número |
token | Token mint para cobrança | (quando type é "fixed") | string codificada em b58 |
Preços com Margem
Adicione uma margem percentual sobre as taxas reais da rede:
[validation.price]type = "margin"margin = 0.1 # 10% margin (0.1 = 10%, 1.0 = 100%)
Preços Fixos
AVISO DE SEGURANÇA: Os preços fixos NÃO incluem a saída do pagador de taxas no valor cobrado. Isso pode permitir que usuários esgotem sua conta pagadora de taxas se não for configurado adequadamente.
Cobre um valor fixo em um token específico independentemente das taxas da rede:
[validation.price]type = "fixed"amount = 1000000 # Amount in token's base unitstoken = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" # USDC mint
Transações Gratuitas
Patrocine todas as taxas de transação (sem cobrança aos usuários):
[validation.price]type = "free"
Medidas de Segurança ao Usar Preços Fixos/Gratuitos
-
Desabilite Todas as Transferências e Operações Monetárias - Impeça que o pagador de taxas seja usado como origem em transferências:
[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 -
Habilite Autenticação - Use autenticação para prevenir abusos:
[kora.auth]api_key = "your-secure-api-key"# orhmac_secret = "your-minimum-32-character-hmac-secret" -
Defina Limites Conservadores - Minimize a exposição:
[validation]max_allowed_lamports = 1000000 # 0.001 SOL maximum
AVISO: Operações particularmente perigosas ao usar preços fixos/gratuitos:
allow_mint_to: Poderia permitir criação ilimitada de tokens se o pagador de taxas tiver autoridade de cunhagemallow_set_authority: Poderia transferir controle de contas críticas para invasoresallow_transfer: Permite drenagem direta dos saldos de tokens do pagador de taxasallow_close_account: Devolve aluguel para contas controladas por invasores
Monitoramento de Desempenho (opcional)
A seção [metrics] configura a coleta e monitoramento de métricas. Esta seção é
opcional e, por padrão, as métricas estão desabilitadas.
[metrics]enabled = trueendpoint = "/metrics"port = 8080scrape_interval = 60[metrics.fee_payer_balance]enabled = trueexpiry_seconds = 30
| Opção | Descrição | Obrigatório | Tipo |
|---|---|---|---|
enabled | Habilitar coleta de métricas | ✅ | boolean |
endpoint | Caminho personalizado do endpoint de métricas | ✅ | string |
port | Porta do endpoint de métricas | ✅ | number |
scrape_interval | Frequência de coleta do Prometheus (segundos) | ✅ | number |
Rastreamento do Saldo do Pagador de Taxas
A seção [metrics.fee_payer_balance] configura o monitoramento automático do
saldo SOL do seu pagador de taxas:
| Opção | Descrição | Obrigatório | Tipo |
|---|---|---|---|
enabled | Ativar rastreamento do saldo do pagador de taxas | ❌ (padrão: false) | boolean |
expiry_seconds | Intervalo de rastreamento em segundo plano em segundos | ❌ (padrão: 30) | number |
Quando ativado, o Kora rastreia automaticamente o saldo SOL do seu pagador de
taxas e o expõe através da métrica Prometheus fee_payer_balance_lamports. Isso
auxilia no planejamento de capacidade e alertas de saldo baixo.
http://localhost:{port}/{metrics-endpoint}
→ Guia de Referência de Monitoramento do Kora
Exemplo Completo
Aqui está uma configuração pronta para produção com práticas recomendadas de segurança:
# 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
Validação da Configuração
O Kora valida sua configuração na inicialização. Se você deseja validar sua configuração sem iniciar o servidor, pode usar o comando de validação de configuração:
kora --config kora.toml config validate # or validate-with-rpc
Você também pode executar o comando validate-with-rpc para validar sua
configuração com o servidor RPC (essa verificação de validação é um pouco mais
lenta, mas realiza verificações de conta mais minuciosas)
Iniciando o Servidor
Depois de configurar seu arquivo kora.toml, você pode iniciar o servidor Kora:
kora --config path/to/kora.toml rpc start --no-load-signer # --other-rpc-flags-here
A flag --no-load-signer irá inicializar o servidor sem carregar nenhum
assinante. Isso é útil para testar sua configuração. Para carregar assinantes,
você precisará configurar o arquivo signers.toml. Uma configuração mínima com
um único assinante seria assim:
[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"
Isso carregará um único assinante da variável de ambiente
MY_SIGNER_PRIVATE_KEY. Então você pode iniciar seu servidor com:
kora --config path/to/kora.toml rpc start --signers-config path/to/signers.toml
Para mais informações e configuração avançada de signatários, consulte o Guia de Signatários.
Melhores Práticas
- Comece Restritivo: Inicie com limites rigorosos e expanda gradualmente
- Monitore o Uso: Acompanhe quais programas e tokens são realmente utilizados
- Atualizações Regulares: Revise e atualize listas de bloqueio e limites
- Teste as Alterações: Valide as mudanças de configuração primeiro em ambiente de testes
- Versionamento: Mantenha um registro de alterações das suas configurações
Precisa de Ajuda?
- Consulte o Guia de Autenticação para configuração de autenticação
- Consulte o Guia de Signatários para configuração de signatários
- Consulte o Guia do Operador para mais informações sobre como executar um nó Kora
- Visite o Solana Stack Exchange com a tag
kora - Reporte problemas no GitHub
Is this page helpful?