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:
- Kora Core Policies - Kern serverinstellingen
- Kora Authenticatie - Authenticatie-instellingen
- Kora Caching - Redis caching voor RPC-aanroepen
- Kora Gebruikslimieten - Transactiebeperking per wallet
- Kora Ingeschakelde Methoden - In te schakelen Kora RPC-methoden
- Validatiebeleid - Transactievalidatie en beveiliging
- Token-2022 Extensieblokkering - Blokkeer risicovolle Token-2022 extensies
- Fee Payer Beleid - Beperkingen voor fee payer wallet
- Prijsconfiguratie - Prijsmodellen voor transactiekosten
- Prestatiemonitoring - Verzameling en monitoring van metrieken
- Volledig Voorbeeld - Volledige productie-klare configuratie
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 = 100payment_address = "YourPaymentAddressPubkey11111111111111111111" # Optional
| Optie | Beschrijving | Vereist | Type |
|---|---|---|---|
rate_limit | Globale snelheidslimiet (verzoeken per seconde) voor alle clients | ✅ | getal |
payment_address | Optioneel 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
| Optie | Beschrijving | Vereist | Type |
|---|---|---|---|
api_key | API-sleutel voor eenvoudige authenticatie | ❌ | string |
hmac_secret | HMAC-geheim voor handtekening-gebaseerde authenticatie (min. 32 tekens) | ❌ | string |
max_timestamp_age | Maximale leeftijd van een HMAC-tijdstempel in seconden | ❌ (standaard: 300) | getal |
Opmerking:
api_keyenhmac_secretstellen 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 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)
| Optie | Beschrijving | Vereist | Type |
|---|---|---|---|
enabled | Schakel Redis-caching in voor RPC-aanroepen | ❌ (standaard: false) | boolean |
url | Redis-verbindings-URL (vereist wanneer ingeschakeld) | ✅ | string |
default_ttl | Standaard TTL voor gecachte items in seconden | ❌ (standaard: 300) | getal |
account_ttl | TTL 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 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
| Optie | Beschrijving | Vereist | Type |
|---|---|---|---|
enabled | Schakel transactiebeperkingen per wallet in | ❌ (standaard: false) | boolean |
cache_url | Redis-verbindings-URL voor gedeelde gebruikstracking | ❌ | string |
max_transactions | Maximum transacties per wallet (0 = onbeperkt) | ❌ (standaard: 100) | number |
fallback_if_unavailable | Sta 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_unavailablewaar is, staat het systeem transacties toe om door te gaan als Redis tijdelijk niet beschikbaar is, waardoor serviceverstoring wordt voorkomen. Het instellen vanmax_transactionsop 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 = trueestimate_transaction_fee = trueget_supported_tokens = truesign_transaction = falsesign_and_send_transaction = falsetransfer_transaction = falseget_blockhash = trueget_config = trueget_payer_signer = true
| Optie | Methodebeschrijving | Vereist | Type |
|---|---|---|---|
liveness | Health check eindpunt | ✅ | boolean |
estimate_transaction_fee | Schat de transactiekosten | ✅ | boolean |
get_supported_tokens | Lijst van geaccepteerde tokens | ✅ | boolean |
sign_transaction | Onderteken een transactie zonder deze naar het netwerk te verzenden | ✅ | boolean |
sign_and_send_transaction | Onderteken een transactie en verzend deze naar het netwerk | ✅ | boolean |
transfer_transaction | Verwerk tokenoverdrachten | ✅ | boolean |
get_blockhash | Verkrijg een recente blockhash | ✅ | boolean |
get_config | Retourneer de Kora serverconfiguratie | ✅ | boolean |
Opmerking: als deze sectie is opgenomen in uw
kora.tomlbestand, moeten alle methoden expliciet worden ingesteld optrueoffalse.
Validatiebeleid
De [validation] sectie definieert Solana-gerelateerde beveiligingsregels en
transactielimieten:
[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",]
| Optie | Beschrijving | Vereist | Type |
|---|---|---|---|
max_allowed_lamports | Het instellen van een maximum aantal lamports per transactie beperkt de blootstelling van de Kora node aan een enkele transactie. | ✅ | number |
max_signatures | Solana 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_source | Oracle 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_transactions | Sta duurzame nonce-transacties toe. Zie Beveiligingsoverwegingen hieronder. | ❌ (standaard: false) | boolean |
allowed_programs | Solana programma's waarmee transacties kunnen interageren | ✅ | Array van b58-gecodeerde string |
allowed_tokens | Token mints die in transacties kunnen worden gebruikt | ✅ | Array van b58-gecodeerde string |
allowed_spl_paid_tokens | SPL-tokens geaccepteerd als betaling voor transactiekosten | ✅ | Array van b58-gecodeerde string |
disallowed_accounts | Accounts die expliciet worden geblokkeerd voor transacties | ✅ | Array van b58-gecodeerde string |
Opmerking: Lege arrays zijn toegestaan, maar u moet ten minste één goedgekeurde
allowed_programs,allowed_tokens,allowed_spl_paid_tokensopgeven 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
| Extensienaam | Beschrijving |
|---|---|
confidential_transfer_mint | Vertrouwelijke overdrachtsconfiguratie voor de mint |
confidential_mint_burn | Vertrouwelijke mint- en burn-configuratie |
transfer_fee_config | Configuratie voor overdrachtskosten |
mint_close_authority | Autoriteit die de mint mag sluiten |
interest_bearing_config | Configuratie voor rentedragende tokens |
non_transferable | Maakt tokens niet-overdraagbaar |
permanent_delegate | Permanente gemachtigde voor de mint |
transfer_hook | Aangepast programma voor overdrachts-hook |
pausable | Configuratie voor pauzeerbare tokens |
Beschikbare Account-extensies
| Extensienaam | Beschrijving |
|---|---|
confidential_transfer_account | Vertrouwelijke overdrachtsstatus voor het account |
non_transferable_account | Niet-overdraagbaar token account |
transfer_hook_account | Overdrachts-hook-status voor het account |
pausable_account | Status van pauzeerbaar token account |
memo_transfer | Vereist memo voor overdrachten |
cpi_guard | Voorkomt bepaalde CPI-aanroepen |
immutable_owner | Account-eigenaar kan niet worden gewijzigd |
default_account_state | Standaardstatus 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_extensionsin [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/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 Instructies
| Optie | Beschrijving | Standaard | Type |
|---|---|---|---|
allow_transfer | Sta kosten betaler toe als verzender in Transfer/TransferWithSeed instructies | false | boolean |
allow_assign | Sta kosten betaler toe als autoriteit in Assign/AssignWithSeed instructies | false | boolean |
allow_create_account | Sta kosten betaler toe als financierende betaler in CreateAccount/CreateAccountWithSeed instructies | false | boolean |
allow_allocate | Sta kosten betaler toe als accounteigenaar in Allocate/AllocateWithSeed instructies | false | boolean |
nonce.allow_initialize | Sta kosten betaler toe om ingesteld te worden als nonce autoriteit in InitializeNonceAccount | false | boolean |
nonce.allow_advance | Sta kosten betaler toe als autoriteit in AdvanceNonceAccount | false | boolean |
nonce.allow_authorize | Sta kosten betaler toe als huidige autoriteit in AuthorizeNonceAccount | false | boolean |
nonce.allow_withdraw | Sta kosten betaler toe als autoriteit in WithdrawNonceAccount | false | boolean |
SPL Token Program Instructies
| Optie | Beschrijving | Standaard | Type |
|---|---|---|---|
allow_transfer | Sta kosten betaler toe als eigenaar in Transfer/TransferChecked instructies | false | boolean |
allow_burn | Sta kosten betaler toe als eigenaar in Burn/BurnChecked instructies | false | boolean |
allow_close_account | Sta kosten betaler toe als eigenaar in CloseAccount instructies | false | boolean |
allow_approve | Sta kosten betaler toe als eigenaar in Approve/ApproveChecked instructies | false | boolean |
allow_revoke | Sta kosten betaler toe als eigenaar in Revoke instructies | false | boolean |
allow_set_authority | Sta kosten betaler toe als huidige autoriteit in SetAuthority instructies | false | boolean |
allow_mint_to | Sta kosten betaler toe als mint autoriteit in MintTo/MintToChecked instructies | false | boolean |
allow_initialize_mint | Sta kosten betaler toe als mint autoriteit in InitializeMint/InitializeMint2 instructies | false | boolean |
allow_initialize_account | Sta kosten betaler toe als eigenaar in InitializeAccount/InitializeAccount3 instructies | false | boolean |
allow_initialize_multisig | Sta kosten betaler toe als ondertekenaar in InitializeMultisig/InitializeMultisig2 instructies | false | boolean |
allow_freeze_account | Sta kosten betaler toe als bevriezingsautoriteit in FreezeAccount instructies | false | boolean |
allow_thaw_account | Sta kosten betaler toe als bevriezingsautoriteit in ThawAccount instructies | false | boolean |
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)
| Optie | Beschrijving | Vereist | Type |
|---|---|---|---|
type | Te gebruiken prijsmodel | ✅ | "margin", "fixed" of "free" |
margin | Margepercentage toe te voegen aan netwerkkosten | (wanneer type "margin" is) | number |
amount | Vast bedrag te berekenen in basiseenheden van de token | (wanneer type "fixed" is) | number |
token | Token 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 unitstoken = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" # USDC mint
Gratis Transacties
Sponsor alle transactiekosten (geen kosten voor gebruikers):
[validation.price]type = "free"
Beveiligingsmaatregelen Bij Gebruik van Vaste/Gratis Prijsstelling
-
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 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 -
Schakel Authenticatie In - Gebruik authenticatie om misbruik te voorkomen:
[kora.auth]api_key = "your-secure-api-key"# orhmac_secret = "your-minimum-32-character-hmac-secret" -
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 heeftallow_set_authority: Kan controle over kritieke accounts overdragen aan aanvallersallow_transfer: Maakt directe leegloop van fee payer-tokensaldi mogelijkallow_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 = trueendpoint = "/metrics"port = 8080scrape_interval = 60[metrics.fee_payer_balance]enabled = trueexpiry_seconds = 30
| Optie | Beschrijving | Vereist | Type |
|---|---|---|---|
enabled | Schakel metrics-verzameling in | ✅ | boolean |
endpoint | Aangepast pad voor metrics-eindpunt | ✅ | string |
port | Poort voor metrics-eindpunt | ✅ | number |
scrape_interval | Frequentie 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:
| Optie | Beschrijving | Vereist | Type |
|---|---|---|---|
enabled | Schakel tracking van fee payer saldo in | ❌ (standaard: false) | boolean |
expiry_seconds | Achtergrond 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 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
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, weightedstrategy = "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
- Begin Restrictief: Start met strikte limieten en breid geleidelijk uit
- Monitor Gebruik: Houd bij welke programma's en tokens daadwerkelijk worden gebruikt
- Regelmatige Updates: Beoordeel en werk blokkeerlijsten en limieten regelmatig bij
- Test Wijzigingen: Valideer configuratiewijzigingen eerst in de testomgeving
- Versiebeheer: Houd een wijzigingslogboek bij van je configuratiewijzigingen
Hulp Nodig?
- Raadpleeg de Authenticatiegids voor auth-instellingen
- Raadpleeg de Ondertekenaarsgids voor ondertekenaars- configuratie
- Raadpleeg de Operatorgids voor meer informatie over het draaien van een Kora-node
- Bezoek Solana Stack Exchange met de
koratag - Meld problemen op GitHub
Is this page helpful?