Configuratie

Gebruik je Kora v2.2.0-beta? Zie Beta Configuratie voor nieuwe opties: Jito bundles, Lighthouse bescherming, reCAPTCHA en gebruikslimieten.

Je Kora node zal transacties ondertekenen voor je gebruikers, dus het is belangrijk om deze zo te configureren dat alleen transacties worden ondertekend die voldoen aan je bedrijfseisen. Kora biedt je veel flexibiliteit in hoe je je node configureert, maar het is belangrijk om de implicaties van je configuratie te begrijpen. kora.toml is het controlecentrum voor je Kora configuratie. Dit document biedt een alomvattende referentie voor het configureren van je Kora paymaster node via het kora.toml configuratiebestand.

Overzicht

Het kora.toml bestand regelt alle aspecten van het gedrag van je Kora node inclusief:

  • Rate limiting en authenticatie
  • Beschikbaarheid van RPC-methoden
  • Validatieregels voor transacties
  • Modellen voor tariefbepaling
  • Beveiligingsbeleid
  • Beschikbaarheid van RPC-methoden
  • Modellen voor tariefbepaling
  • Configuratie van betalingsadres
  • Prestatiemonitoring

Je configuratiebestand moet worden geplaatst in je deployment directory of gespecificeerd worden via de --config vlag bij het starten van de server.

Configuratiesecties

Het kora.toml bestand is georganiseerd in secties, elk met een eigen set opties. Deze handleiding doorloopt elke sectie en legt de beschikbare opties uit:

Voorbeeld kora.toml bestandssecties:

[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 Core-beleid

De [kora] sectie configureert het gedrag van de kernserver:

[kora]
rate_limit = 100
payment_address = "YourPaymentAddressPubkey11111111111111111111" # Optional
OptieBeschrijvingVereistType
rate_limitGlobale snelheidslimiet (verzoeken per seconde) voor alle clientsgetal
payment_addressOptioneel betalingsadres om betalingstokens te ontvangen (standaard ondertekenadres(sen) indien niet opgegeven)b58-gecodeerde string

Kora-authenticatie

De [kora.auth] sectie configureert authenticatie voor de Kora-server:

[kora.auth]
api_key = "kora_live_sk_1234567890abcdef"
hmac_secret = "kora_hmac_your-strong-hmac-secret-key-here"
max_timestamp_age = 300
OptieBeschrijvingVereistType
api_keyAPI-sleutel voor eenvoudige authenticatiestring
hmac_secretHMAC-geheim voor handtekening-gebaseerde authenticatie (min. 32 tekens)string
max_timestamp_ageMaximale leeftijd van een HMAC-tijdstempel in seconden❌ (standaard: 300)getal

Opmerking: api_key en hmac_secret stellen een globaal authenticatiebeleid in voor alle clients. Voor gedetailleerde authenticatie-instellingen, zie Authenticatiegids.

Kora-caching (optioneel)

De [kora.cache] sectie configureert Redis-gebaseerde caching voor Solana RPC-aanroepen. Dit kan de prestaties aanzienlijk verbeteren door redundante account data ophalingen te verminderen:

[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)
OptieBeschrijvingVereistType
enabledSchakel Redis-caching in voor RPC-aanroepen❌ (standaard: false)boolean
urlRedis-verbindings-URL (vereist wanneer ingeschakeld)string
default_ttlStandaard TTL voor gecachte items in seconden❌ (standaard: 300)getal
account_ttlTTL voor account data cache in seconden❌ (standaard: 60)getal

Opmerking: Wanneer caching is ingeschakeld, moet een Redis-instantie beschikbaar zijn op de opgegeven URL. De cache valt netjes terug op directe RPC-aanroepen als Redis niet beschikbaar is.

Kora Gebruikslimieten (optioneel)

De sectie [kora.usage_limit] configureert transactiebeperkingen per wallet om misbruik te voorkomen en eerlijk gebruik onder uw gebruikers te garanderen. Dit kan ook worden gebruikt om beloningsprogramma's te creëren die de transactiekosten van gebruikers tot een bepaalde limiet subsidiëren.

Belangrijk: Momenteel is de enige vorm van gebruiksbeperking die door Kora wordt ondersteund een permanente limiet. Zodra een wallet zijn transactielimiet bereikt, kan deze niet meer worden gereset en kan de gebruiker geen transacties meer indienen met diezelfde wallet. Deze limiet blijft bestaan totdat deze handmatig uit Redis wordt verwijderd of de Redis-gegevens worden gereset.

Opmerking: Deze functie vereist Redis wanneer deze is ingeschakeld voor meerdere Kora-instanties:

[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
OptieBeschrijvingVereistType
enabledSchakel transactiebeperkingen per wallet in❌ (standaard: false)boolean
cache_urlRedis-verbindings-URL voor gedeelde gebruikstrackingstring
max_transactionsMaximum transacties per wallet (0 = onbeperkt)❌ (standaard: 100)number
fallback_if_unavailableSta transacties toe als Redis niet beschikbaar is❌ (standaard: true)boolean

Opmerking: Gebruikslimieten worden bijgehouden per wallet-adres met automatische TTL-gebaseerde vervaldatum. Wanneer fallback_if_unavailable waar is, staat het systeem transacties toe om door te gaan als Redis tijdelijk niet beschikbaar is, waardoor serviceverstoring wordt voorkomen. Het instellen van max_transactions op 0 staat onbeperkte transacties toe.

Kora Ingeschakelde Methoden (optioneel)

De [kora.enabled_methods] sectie bepaalt welke RPC-methoden zijn ingeschakeld. Deze sectie is optioneel en standaard zijn alle methoden ingeschakeld. Elke methode kan worden in- of uitgeschakeld door de waarde in te stellen op true of 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
OptieMethodebeschrijvingVereistType
livenessHealth check eindpuntboolean
estimate_transaction_feeSchat de transactiekostenboolean
get_supported_tokensLijst van geaccepteerde tokensboolean
sign_transactionOnderteken een transactie zonder deze naar het netwerk te verzendenboolean
sign_and_send_transactionOnderteken een transactie en verzend deze naar het netwerkboolean
transfer_transactionVerwerk tokenoverdrachtenboolean
get_blockhashVerkrijg een recente blockhashboolean
get_configRetourneer de Kora serverconfiguratieboolean

Opmerking: als deze sectie is opgenomen in uw kora.toml bestand, moeten alle methoden expliciet worden ingesteld op true of false.

Validatiebeleid

De [validation] sectie definieert Solana-gerelateerde beveiligingsregels en transactielimieten:

[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",
]
OptieBeschrijvingVereistType
max_allowed_lamportsHet instellen van een maximum aantal lamports per transactie beperkt de blootstelling van de Kora node aan een enkele transactie.number
max_signaturesSolana basiskosten zijn een functie van het aantal handtekeningen in een transactie, dus het instellen van een maximum aantal handtekeningen per transactie is een goede manier om te voorkomen dat gebruikers te veel SOL uitgeven aan een enkele transactie.number
price_sourceOracle voor tokenprijsgegevens. Opmerking: Wanneer ingesteld op "Jupiter", is de JUPITER_API_KEY omgevingsvariabele verplicht. De server start niet zonder deze."Jupiter" of "Mock"
allow_durable_transactionsSta duurzame nonce-transacties toe. Zie Beveiligingsoverwegingen hieronder.❌ (standaard: false)boolean
allowed_programsSolana programma's waarmee transacties kunnen interagerenArray van b58-gecodeerde string
allowed_tokensToken mints die in transacties kunnen worden gebruiktArray van b58-gecodeerde string
allowed_spl_paid_tokensSPL-tokens geaccepteerd als betaling voor transactiekostenArray van b58-gecodeerde string
disallowed_accountsAccounts die expliciet worden geblokkeerd voor transactiesArray van b58-gecodeerde string

Opmerking: Lege arrays zijn toegestaan, maar u moet ten minste één goedgekeurde allowed_programs, allowed_tokens, allowed_spl_paid_tokens opgeven om de Kora-node in staat te stellen transacties te verwerken. U moet het System Program of Token Program opgeven om de Kora-node in staat te stellen overdrachten te verwerken. Om veelvoorkomende instructietypes mogelijk te maken (bijv. Compute Budget, Address Lookup Table), moet u het Compute Budget Program of Address Lookup Table Program opgeven, enz.

Duurzame Transactiebeveiliging

BEVEILIGINGSWAARSCHUWING: Duurzame nonce-transacties maken het mogelijk om ondertekende transacties voor onbepaalde tijd vast te houden en later in te dienen. Dit kan worden gebruikt als een economische aanvalsvector waarbij iemand een ondertekende transactie kan verkrijgen en wacht met indienen totdat de marktomstandigheden voor hen gunstig zijn (bijv. wanneer de waarde van SOL is gedaald of de waarde van het betalingstoken is gestegen).

Standaard is allow_durable_transactions ingesteld op false om alle duurzame nonce-transacties te blokkeren. Schakel dit alleen in als uw applicatie specifiek duurzame transacties vereist en u de risico's begrijpt.

Als u duurzame transacties moet inschakelen, overweeg dan:

  • Authenticatie gebruiken om API-toegang te beperken
  • Aanvullende off-chain validatie implementeren
  • Monitoren op ongebruikelijke transactiepatronen
  • Saldi van ondertekeningsaccounts monitoren en beperken
  • Ondertekeningssleutels regelmatig roteren

Lees meer over duurzame nonce-transacties in de Solana Docs.

Token-2022 Extensieblokkering

De sectie [validation.token2022] stelt u in staat om specifieke Token-2022 extensies te blokkeren voor verbeterde beveiliging. Alle extensies zijn standaard ingeschakeld. U kunt specifieke extensies blokkeren door ze toe te voegen aan de arrays blocked_mint_extensions of 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
]

Beschikbare Mint-extensies

ExtensienaamBeschrijving
confidential_transfer_mintVertrouwelijke overdrachtsconfiguratie voor de mint
confidential_mint_burnVertrouwelijke mint- en burn-configuratie
transfer_fee_configConfiguratie voor overdrachtskosten
mint_close_authorityAutoriteit die de mint mag sluiten
interest_bearing_configConfiguratie voor rentedragende tokens
non_transferableMaakt tokens niet-overdraagbaar
permanent_delegatePermanente gemachtigde voor de mint
transfer_hookAangepast programma voor overdrachts-hook
pausableConfiguratie voor pauzeerbare tokens

Beschikbare Account-extensies

ExtensienaamBeschrijving
confidential_transfer_accountVertrouwelijke overdrachtsstatus voor het account
non_transferable_accountNiet-overdraagbaar token account
transfer_hook_accountOverdrachts-hook-status voor het account
pausable_accountStatus van pauzeerbaar token account
memo_transferVereist memo voor overdrachten
cpi_guardVoorkomt bepaalde CPI-aanroepen
immutable_ownerAccount-eigenaar kan niet worden gewijzigd
default_account_stateStandaardstatus voor nieuwe accounts

transfer_hook

Beveiligingsoverwegingen

PermanentDelegate-extensie - Tokens met deze extensie staan de gemachtigde toe om tokens op elk moment over te dragen of te verbranden zonder toestemming van de eigenaar. Dit creëert aanzienlijke risico's voor de Kora node-operator omdat betalingsgelden kunnen worden inbeslaggenomen na betaling.

  • Overweeg "permanent_delegate" toe te voegen aan blocked_mint_extensions in [validation.token2022] tenzij dit expliciet nodig is voor uw gebruik.
  • Vermijd het gebruik van betalingstokens met de permanent_delegate-extensie.

Beleid voor Kosten Betaler

De [validation.fee_payer_policy] sectie biedt gedetailleerde controle over welke acties de kosten betaler wallet van uw Kora node kan uitvoeren. Het beleid is georganiseerd op programmatype (System, SPL Token, Token-2022) en omvat alle verschillende instructietypes. Dit voorkomt onverwacht gedrag van transacties van gebruikers die uw Kora node als ondertekenaar gebruiken.

Als bijvoorbeeld spl_token.allow_transfer is ingesteld op false, zal de Kora node geen transacties ondertekenen die een SPL token overdracht bevatten waarbij de kosten betaler van de Kora node de overdrachtsautoriteit is.

[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 Instructies

OptieBeschrijvingStandaardType
allow_transferSta kosten betaler toe als verzender in Transfer/TransferWithSeed instructiesfalseboolean
allow_assignSta kosten betaler toe als autoriteit in Assign/AssignWithSeed instructiesfalseboolean
allow_create_accountSta kosten betaler toe als financierende betaler in CreateAccount/CreateAccountWithSeed instructiesfalseboolean
allow_allocateSta kosten betaler toe als accounteigenaar in Allocate/AllocateWithSeed instructiesfalseboolean
nonce.allow_initializeSta kosten betaler toe om ingesteld te worden als nonce autoriteit in InitializeNonceAccountfalseboolean
nonce.allow_advanceSta kosten betaler toe als autoriteit in AdvanceNonceAccountfalseboolean
nonce.allow_authorizeSta kosten betaler toe als huidige autoriteit in AuthorizeNonceAccountfalseboolean
nonce.allow_withdrawSta kosten betaler toe als autoriteit in WithdrawNonceAccountfalseboolean

SPL Token Program Instructies

OptieBeschrijvingStandaardType
allow_transferSta kosten betaler toe als eigenaar in Transfer/TransferChecked instructiesfalseboolean
allow_burnSta kosten betaler toe als eigenaar in Burn/BurnChecked instructiesfalseboolean
allow_close_accountSta kosten betaler toe als eigenaar in CloseAccount instructiesfalseboolean
allow_approveSta kosten betaler toe als eigenaar in Approve/ApproveChecked instructiesfalseboolean
allow_revokeSta kosten betaler toe als eigenaar in Revoke instructiesfalseboolean
allow_set_authoritySta kosten betaler toe als huidige autoriteit in SetAuthority instructiesfalseboolean
allow_mint_toSta kosten betaler toe als mint autoriteit in MintTo/MintToChecked instructiesfalseboolean
allow_initialize_mintSta kosten betaler toe als mint autoriteit in InitializeMint/InitializeMint2 instructiesfalseboolean
allow_initialize_accountSta kosten betaler toe als eigenaar in InitializeAccount/InitializeAccount3 instructiesfalseboolean
allow_initialize_multisigSta kosten betaler toe als ondertekenaar in InitializeMultisig/InitializeMultisig2 instructiesfalseboolean
allow_freeze_accountSta kosten betaler toe als bevriezingsautoriteit in FreezeAccount instructiesfalseboolean
allow_thaw_accountSta kosten betaler toe als bevriezingsautoriteit in ThawAccount instructiesfalseboolean

Token-2022 ondersteunt dezelfde instructieset als SPL Token met identieke configuratieoptie (onder de sectie [validation.fee_payer_policy.token_2022]).

Beveiligingsoverwegingen

BEVEILIGINGSWAARSCHUWING: Om veiligheidsredenen wordt aanbevolen om al deze in te stellen op false (standaard) en alleen indien nodig in te schakelen. Dit voorkomt ongewenst gedrag zoals gebruikers die uw fee payer-account leegtrekken of tokens uit uw fee payer-account verbranden. Dit voorkomt:

  • Account Leegtrekken: Gebruikers die SOL of tokens overmaken vanaf uw fee payer-account
  • Autoriteitsovernname: Gebruikers die bevoegdheden wijzigen op accounts die eigendom zijn van uw fee payer
  • Ongeautoriseerd Minten: Gebruikers die tokens minten als uw fee payer mint-bevoegdheid heeft
  • Account Manipulatie: Gebruikers die accounts bevriezen, sluiten of wijzigen die worden beheerd door uw fee payer

Best Practice: Begin met alle rechten uitgeschakeld en schakel alleen de minimaal benodigde set in voor uw specifieke use case.

Prijsconfiguratie (optioneel)

De sectie [validation.price] definieert hoe transactiekosten worden berekend. Drie prijsmodellen zijn beschikbaar:

  • Margepricing (standaard) - Voeg een procentuele marge toe bovenop de werkelijke netwerkkosten (standaardmarge is 0.0)
  • Vaste Pricing - Bereken een vast bedrag in een specifieke token, ongeacht netwerkkosten
  • Gratis Pricing - Sponser alle transactiekosten (geen kosten voor gebruikers)
OptieBeschrijvingVereistType
typeTe gebruiken prijsmodel"margin", "fixed" of "free"
marginMargepercentage toe te voegen aan netwerkkosten(wanneer type "margin" is)number
amountVast bedrag te berekenen in basiseenheden van de token(wanneer type "fixed" is)number
tokenToken mint waarin te berekenen(wanneer type "fixed" is)b58-gecodeerde string

Marge Prijsstelling

Voeg een percentuele marge toe bovenop de werkelijke netwerkkosten:

[validation.price]
type = "margin"
margin = 0.1 # 10% margin (0.1 = 10%, 1.0 = 100%)

Vaste Prijsstelling

BEVEILIGINGSWAARSCHUWING: Vaste prijsstelling omvat NIET de uitgaande kosten van de fee payer in het gefactureerde bedrag. Dit kan gebruikers in staat stellen uw fee payer-account leeg te trekken als het niet correct is geconfigureerd.

Reken een vast bedrag in een specifiek token aan, ongeacht de netwerkkosten:

[validation.price]
type = "fixed"
amount = 1000000 # Amount in token's base units
token = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" # USDC mint

Gratis Transacties

Sponsor alle transactiekosten (geen kosten voor gebruikers):

[validation.price]
type = "free"

Beveiligingsmaatregelen Bij Gebruik van Vaste/Gratis Prijsstelling

  1. Schakel Alle Overdrachts- en Monetaire Operaties Uit - Voorkom dat fee payer als bron wordt gebruikt bij overdrachten:

    [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. Schakel Authenticatie In - Gebruik authenticatie om misbruik te voorkomen:

    [kora.auth]
    api_key = "your-secure-api-key"
    # or
    hmac_secret = "your-minimum-32-character-hmac-secret"
  3. Stel Conservatieve Limieten In - Minimaliseer de blootstelling:

    [validation]
    max_allowed_lamports = 1000000 # 0.001 SOL maximum

WAARSCHUWING: Bijzonder gevaarlijke operaties bij gebruik van vaste/gratis prijsstelling:

  • allow_mint_to: Kan onbeperkte tokencreatie mogelijk maken als fee payer mint-autoriteit heeft
  • allow_set_authority: Kan controle over kritieke accounts overdragen aan aanvallers
  • allow_transfer: Maakt directe leegloop van fee payer-tokensaldi mogelijk
  • allow_close_account: Retourneert rent naar door aanvallers gecontroleerde accounts

Prestatiemonitoring (optioneel)

De sectie [metrics] configureert het verzamelen van metrics en monitoring. Deze sectie is optioneel en standaard zijn metrics uitgeschakeld.

[metrics]
enabled = true
endpoint = "/metrics"
port = 8080
scrape_interval = 60
[metrics.fee_payer_balance]
enabled = true
expiry_seconds = 30
OptieBeschrijvingVereistType
enabledSchakel metrics-verzameling inboolean
endpointAangepast pad voor metrics-eindpuntstring
portPoort voor metrics-eindpuntnumber
scrape_intervalFrequentie van Prometheus scrape (seconden)number

Tracking van Fee Payer Saldo

De [metrics.fee_payer_balance] sectie configureert automatische monitoring van het SOL-saldo van je fee payer:

OptieBeschrijvingVereistType
enabledSchakel tracking van fee payer saldo in❌ (standaard: false)boolean
expiry_secondsAchtergrond tracking interval in seconden❌ (standaard: 30)number

Wanneer ingeschakeld, volgt Kora automatisch het SOL-saldo van je fee payer en stelt het beschikbaar via de fee_payer_balance_lamports Prometheus gauge. Dit helpt bij capaciteitsplanning en waarschuwingen bij een laag saldo.

http://localhost:{port}/{metrics-endpoint}

→ Kora Monitoring Referentiegids

Compleet Voorbeeld

Hier is een productie-klare configuratie met best practices voor beveiliging:

# 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

Configuratievalidatie

Kora valideert je configuratie bij het opstarten. Als je je configuratie wilt valideren zonder de server te starten, kun je het configuratievalidatie- commando gebruiken:

kora --config kora.toml config validate # or validate-with-rpc

Je kunt ook het validate-with-rpc commando uitvoeren om je configuratie te valideren met de RPC-server (deze validatiecontrole is iets langzamer maar doet meer grondige accountcontroles)

De Server Starten

Zodra je je kora.toml bestand hebt geconfigureerd, kun je de Kora-server starten:

kora --config path/to/kora.toml rpc start --no-load-signer # --other-rpc-flags-here

De --no-load-signer vlag initialiseert de server zonder signers te laden. Dit is handig voor het testen van je configuratie. Om signers te laden, moet je het signers.toml bestand configureren. Een minimale configuratie met één signer zou er als volgt uitzien:

[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"

Dit laadt een enkele signer vanuit de MY_SIGNER_PRIVATE_KEY omgevings- variabele. Vervolgens kun je je server starten met:

kora --config path/to/kora.toml rpc start --signers-config path/to/signers.toml

Voor meer informatie en geavanceerde ondertekeningsconfiguratie, zie de Ondertekenaarsgids.

Best Practices

  1. Begin Restrictief: Start met strikte limieten en breid geleidelijk uit
  2. Monitor Gebruik: Houd bij welke programma's en tokens daadwerkelijk worden gebruikt
  3. Regelmatige Updates: Beoordeel en werk blokkeerlijsten en limieten regelmatig bij
  4. Test Wijzigingen: Valideer configuratiewijzigingen eerst in de testomgeving
  5. Versiebeheer: Houd een wijzigingslogboek bij van je configuratiewijzigingen

Hulp Nodig?

Is this page helpful?

Beheerd door

© 2026 Solana Foundation.
Alle rechten voorbehouden.
Blijf Verbonden