Konfiguracja

Używasz Kora v2.2.0-beta? Zobacz Konfiguracja Beta dla nowych opcji: pakiety Jito, ochrona Lighthouse, reCAPTCHA i limity użytkowania.

Twój węzeł Kora będzie podpisywać transakcje dla Twoich użytkowników, dlatego ważne jest, aby skonfigurować go tak, by podpisywał tylko transakcje spełniające Twoje wymagania biznesowe. Kora zapewnia dużą elastyczność w konfigurowaniu węzła, ale istotne jest zrozumienie konsekwencji Twojej konfiguracji. kora.toml jest centrum sterowania konfiguracją Kora. Ten dokument zawiera wyczerpującą dokumentację dotyczącą konfiguracji węzła paymaster Kora poprzez plik konfiguracyjny kora.toml.

Przegląd

Plik kora.toml kontroluje wszystkie aspekty zachowania węzła Kora, w tym:

  • Ograniczenia szybkości i uwierzytelnianie
  • Dostępność metod RPC
  • Reguły walidacji transakcji
  • Modele wyceny opłat
  • Polityki bezpieczeństwa
  • Dostępność metod RPC
  • Modele wyceny opłat
  • Konfiguracja adresów płatności
  • Monitorowanie wydajności

Plik konfiguracyjny powinien znajdować się w katalogu wdrożenia lub być wskazany przez flagę --config przy uruchamianiu serwera.

Sekcje konfiguracji

Plik kora.toml jest podzielony na sekcje, z których każda ma własny zestaw opcji. Ten przewodnik omawia każdą sekcję i wyjaśnia dostępne opcje:

Przykładowe sekcje pliku 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

Podstawowe zasady Kora

Sekcja [kora] konfiguruje podstawowe zachowanie serwera:

[kora]
rate_limit = 100
payment_address = "YourPaymentAddressPubkey11111111111111111111" # Optional
OpcjaOpisWymaganeTyp
rate_limitGlobalny limit żądań (żądań na sekundę) dla wszystkich klientówliczba
payment_addressOpcjonalny adres płatności do otrzymywania tokenów płatniczych (domyślnie adresy podpisujące, jeśli nie określono)ciąg zakodowany w b58

Uwierzytelnianie Kora

Sekcja [kora.auth] konfiguruje uwierzytelnianie dla serwera Kora:

[kora.auth]
api_key = "kora_live_sk_1234567890abcdef"
hmac_secret = "kora_hmac_your-strong-hmac-secret-key-here"
max_timestamp_age = 300
OpcjaOpisWymaganeTyp
api_keyKlucz API do prostego uwierzytelnianiaciąg
hmac_secretSekret HMAC do uwierzytelniania opartego na podpisie (min. 32 znaki)ciąg
max_timestamp_ageMaksymalny wiek znacznika czasu HMAC w sekundach❌ (domyślnie: 300)liczba

Uwaga: api_key i hmac_secret ustawiają globalną politykę uwierzytelniania dla wszystkich klientów. Aby uzyskać szczegółowe informacje na temat konfiguracji uwierzytelniania, zobacz Przewodnik uwierzytelniania.

Buforowanie Kora (opcjonalne)

Sekcja [kora.cache] konfiguruje buforowanie oparte na Redis dla wywołań RPC Solana. Może to znacząco poprawić wydajność poprzez redukcję redundantnych pobierań danych konta:

[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)
OpcjaOpisWymaganeTyp
enabledWłącz buforowanie Redis dla wywołań RPC❌ (domyślnie: false)boolean
urlAdres URL połączenia Redis (wymagany po włączeniu)ciąg
default_ttlDomyślny TTL dla buforowanych wpisów w sekundach❌ (domyślnie: 300)liczba
account_ttlTTL dla bufora danych konta w sekundach❌ (domyślnie: 60)liczba

Uwaga: Gdy buforowanie jest włączone, instancja Redis musi być dostępna pod określonym adresem URL. Bufor w sposób płynny przełącza się na bezpośrednie wywołania RPC, jeśli Redis jest niedostępny.

Limity użycia Kora (opcjonalnie)

Sekcja [kora.usage_limit] konfiguruje ograniczenia transakcji dla pojedynczych portfeli, aby zapobiec nadużyciom i zapewnić sprawiedliwe wykorzystanie zasobów przez wszystkich użytkowników. Może to być również wykorzystane do tworzenia programów nagród subsydiujących opłaty transakcyjne użytkowników do określonego limitu.

Ważne: Obecnie jedyną formą ograniczenia użycia obsługiwaną przez Kora jest limit stały. Gdy portfel osiągnie swój limit transakcji, nie może zostać zresetowany, a użytkownik nie będzie mógł już przesyłać kolejnych transakcji przy użyciu tego samego portfela. Ten limit pozostaje aktywny do czasu ręcznego usunięcia z Redis lub zresetowania danych Redis.

Uwaga: Ta funkcja wymaga Redis, gdy jest włączona w wielu instancjach Kora:

[kora.usage_limit]
enabled = true # Enable/disable usage limiting
cache_url = "redis://localhost:6379" # Redis URL for shared state (required when enabled)
max_transactions = 100 # Max transactions per wallet (0 = unlimited)
fallback_if_unavailable = true # Continue if Redis is unavailable
OpcjaOpisWymaganeTyp
enabledWłącz ograniczenia transakcji dla portfeli❌ (domyślnie: false)boolean
cache_urlAdres URL połączenia Redis do wspólnego śledzenia użyciastring
max_transactionsMaksymalna liczba transakcji na portfel (0 = bez limitu)❌ (domyślnie: 100)number
fallback_if_unavailableZezwalaj na transakcje, gdy Redis jest niedostępny❌ (domyślnie: true)boolean

Uwaga: Limity użycia są śledzone dla każdego adresu portfela z automatycznym wygasaniem opartym na TTL. Gdy fallback_if_unavailable ma wartość true, system pozwala na realizację transakcji, jeśli Redis jest tymczasowo niedostępny, zapobiegając przerwaniu usługi. Ustawienie max_transactions na 0 zezwoli na nieograniczoną liczbę transakcji.

Metody włączone w Kora (opcjonalnie)

Sekcja [kora.enabled_methods] kontroluje, które metody RPC są włączone. Ta sekcja jest opcjonalna i domyślnie wszystkie metody są włączone. Każda metoda może zostać włączona lub wyłączona poprzez ustawienie wartości na true lub 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
OpcjaOpis metodyWymaganeTyp
livenessEndpoint sprawdzania stanu zdrowiaboolean
estimate_transaction_feeSzacowanie opłaty za transakcjęboolean
get_supported_tokensWyświetlanie listy akceptowanych tokenówboolean
sign_transactionPodpisanie transakcji bez wysyłania jej do sieciboolean
sign_and_send_transactionPodpisanie transakcji i wysłanie jej do sieciboolean
transfer_transactionObsługa transferów tokenówboolean
get_blockhashPobranie najnowszego blockhashboolean
get_configZwrócenie konfiguracji serwera Koraboolean

Uwaga: jeśli ta sekcja jest uwzględniona w pliku kora.toml, wszystkie metody muszą być jawnie ustawione na true lub false.

Polityki walidacji

Sekcja [validation] definiuje reguły bezpieczeństwa związane z Solana oraz limity transakcji:

[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",
]
OpcjaOpisWymaganeTyp
max_allowed_lamportsUstawienie maksymalnej liczby lamportów na transakcję ogranicza ekspozycję węzła Kora na pojedynczą transakcję.number
max_signaturesPodstawowe opłaty Solana są funkcją liczby podpisów w transakcji, więc ustawienie maksymalnej liczby podpisów na transakcję to dobry sposób na zapobieganie wydawaniu przez użytkowników zbyt dużej ilości SOL w pojedynczej transakcji.number
price_sourceWyrocznia dla danych o cenach tokenów. Uwaga: Gdy ustawione na "Jupiter", zmienna środowiskowa JUPITER_API_KEY jest wymagana. Serwer nie uruchomi się bez niej."Jupiter" lub "Mock"
allow_durable_transactionsZezwolenie na trwałe transakcje nonce. Zobacz Względy bezpieczeństwa poniżej.❌ (domyślnie: false)boolean
allowed_programsProgramy Solana, z którymi transakcje mogą wchodzić w interakcjeTablica ciągów zakodowanych w b58
allowed_tokensMinty tokenów, które mogą być używane w transakcjachTablica ciągów zakodowanych w b58
allowed_spl_paid_tokensTokeny SPL akceptowane jako płatność za opłaty transakcyjneTablica ciągów zakodowanych w b58
disallowed_accountsKonta, które są wyraźnie zablokowane w transakcjachTablica ciągów zakodowanych w b58

Uwaga: Puste tablice są dozwolone, ale musisz określić co najmniej jeden whitelistowany allowed_programs, allowed_tokens, allowed_spl_paid_tokens aby węzeł Kora mógł przetwarzać transakcje. Musisz określić System Program lub Token Program, aby węzeł Kora mógł przetwarzać przelewy. Aby włączyć popularne typy instrukcji (np. Compute Budget, Address Lookup Table), musisz określić Compute Budget Program lub Address Lookup Table Program itp.

Bezpieczeństwo trwałych transakcji

OSTRZEŻENIE BEZPIECZEŃSTWA: Trwałe transakcje nonce umożliwiają przechowywanie podpisanych transakcji przez nieograniczony czas i późniejsze ich przesyłanie. Może to być wykorzystane jako wektor ataku ekonomicznego, gdzie ktoś może uzyskać podpisaną transakcję i poczekać z jej przesłaniem, aż warunki rynkowe będą dla niego korzystne (np. gdy wartość SOL spadnie lub wartość tokena płatniczego wzrośnie).

Domyślnie allow_durable_transactions jest ustawiony na false, aby blokować wszystkie trwałe transakcje nonce. Włącz to tylko wtedy, gdy Twoja aplikacja specjalnie wymaga trwałych transakcji i rozumiesz związane z tym ryzyko.

Jeśli musisz włączyć trwałe transakcje, rozważ:

  • Użycie uwierzytelniania w celu ograniczenia dostępu do API
  • Wdrożenie dodatkowej walidacji off-chain
  • Monitorowanie nietypowych wzorców transakcji
  • Monitorowanie i ograniczanie sald kont podpisujących
  • Regularne rotowanie kluczy podpisujących

Dowiedz się więcej o trwałych transakcjach nonce w dokumentacji Solana.

Blokowanie rozszerzeń Token-2022

Sekcja [validation.token2022] umożliwia blokowanie określonych rozszerzeń Token-2022 w celu zwiększenia bezpieczeństwa. Wszystkie rozszerzenia są domyślnie włączone. Możesz zablokować konkretne rozszerzenia, dodając je do tablic blocked_mint_extensions lub 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
]

Dostępne rozszerzenia Mint

Nazwa rozszerzeniaOpis
confidential_transfer_mintKonfiguracja poufnych transferów dla mint
confidential_mint_burnKonfiguracja poufnego wybijania i spalania
transfer_fee_configKonfiguracja opłat za transfer
mint_close_authorityUprawnienie do zamknięcia mint
interest_bearing_configKonfiguracja tokenów oprocentowanych
non_transferableCzyni tokeny niezbywalnymi
permanent_delegateStały delegat dla mint
transfer_hookProgram niestandardowego hooka transferu
pausableKonfiguracja wstrzymywalnych tokenów

Dostępne rozszerzenia konta

Nazwa rozszerzeniaOpis
confidential_transfer_accountStan poufnych transferów dla konta
non_transferable_accountKonto tokenów niezbywalnych
transfer_hook_accountStan hooka transferu dla konta
pausable_accountStan konta wstrzymywalnych tokenów
memo_transferWymaga notatki do transferów
cpi_guardZapobiega określonym wywołaniom CPI
immutable_ownerWłaściciel konta nie może zostać zmieniony
default_account_stateDomyślny stan dla nowych kont

transfer_hook

Kwestie bezpieczeństwa

Rozszerzenie PermanentDelegate - Tokeny z tym rozszerzeniem pozwalają delegatowi na transfer/spalenie tokenów w każdym momencie bez zgody właściciela. Stwarza to znaczące ryzyko dla operatora węzła Kora, ponieważ środki płatności mogą zostać przejęte po dokonaniu płatności.

  • Rozważ dodanie "permanent_delegate" do blocked_mint_extensions w [validation.token2022], chyba że jest to wyraźnie potrzebne w Twoim przypadku użycia.
  • Unikaj używania tokenów płatniczych z rozszerzeniem permanent_delegate.

Polityka płatnika opłat

Sekcja [validation.fee_payer_policy] zapewnia szczegółową kontrolę nad tym, jakie działania może wykonywać portfel płatnika opłat Twojego węzła Kora. Polityka jest zorganizowana według typu programu (System Program, Token Program, Token-2022) i obejmuje wszystkie różne typy instrukcji. Zapobiega to nieoczekiwanemu zachowaniu transakcji użytkowników wykorzystujących Twój węzeł Kora jako sygnatariusza.

Na przykład, jeśli spl_token.allow_transfer jest ustawione na false, węzeł Kora nie będzie podpisywać transakcji zawierających transfer tokenów SPL, w których płatnik opłat węzła Kora jest uprawniony do transferu.

[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

Instrukcje System Program

OpcjaOpisDomyślnieTyp
allow_transferZezwól płatnikowi opłat jako nadawcy w instrukcjach Transfer/TransferWithSeedfalseboolean
allow_assignZezwól płatnikowi opłat jako uprawnionemu w instrukcjach Assign/AssignWithSeedfalseboolean
allow_create_accountZezwól płatnikowi opłat jako finansującemu w instrukcjach CreateAccount/CreateAccountWithSeedfalseboolean
allow_allocateZezwól płatnikowi opłat jako właścicielowi konta w instrukcjach Allocate/AllocateWithSeedfalseboolean
nonce.allow_initializeZezwól na ustawienie płatnika opłat jako uprawnionego nonce w InitializeNonceAccountfalseboolean
nonce.allow_advanceZezwól płatnikowi opłat jako uprawnionemu w AdvanceNonceAccountfalseboolean
nonce.allow_authorizeZezwól płatnikowi opłat jako aktualnemu uprawnionemu w AuthorizeNonceAccountfalseboolean
nonce.allow_withdrawZezwól płatnikowi opłat jako uprawnionemu w WithdrawNonceAccountfalseboolean

Instrukcje Token Program

OpcjaOpisDomyślnieTyp
allow_transferZezwól płatnikowi opłat jako właścicielowi w instrukcjach Transfer/TransferCheckedfalseboolean
allow_burnZezwól płatnikowi opłat jako właścicielowi w instrukcjach Burn/BurnCheckedfalseboolean
allow_close_accountZezwól płatnikowi opłat jako właścicielowi w instrukcjach CloseAccountfalseboolean
allow_approveZezwól płatnikowi opłat jako właścicielowi w instrukcjach Approve/ApproveCheckedfalseboolean
allow_revokeZezwól płatnikowi opłat jako właścicielowi w instrukcjach Revokefalseboolean
allow_set_authorityZezwól płatnikowi opłat jako aktualnemu uprawnionemu w instrukcjach SetAuthorityfalseboolean
allow_mint_toZezwól płatnikowi opłat jako uprawnionemu do bicia w instrukcjach MintTo/MintToCheckedfalseboolean
allow_initialize_mintZezwól płatnikowi opłat jako uprawnionemu do bicia w instrukcjach InitializeMint/InitializeMint2falseboolean
allow_initialize_accountZezwól płatnikowi opłat jako właścicielowi w instrukcjach InitializeAccount/InitializeAccount3falseboolean
allow_initialize_multisigZezwól płatnikowi opłat jako sygnatariuszowi w instrukcjach InitializeMultisig/InitializeMultisig2falseboolean
allow_freeze_accountZezwól płatnikowi opłat jako uprawnionemu do zamrażania w instrukcjach FreezeAccountfalseboolean
allow_thaw_accountZezwól płatnikowi opłat jako uprawnionemu do zamrażania w instrukcjach ThawAccountfalseboolean

Token-2022 obsługuje ten sam zestaw instrukcji co SPL Token z identycznymi opcjami konfiguracji (w sekcji [validation.fee_payer_policy.token_2022]).

Kwestie bezpieczeństwa

OSTRZEŻENIE BEZPIECZEŃSTWA: Ze względów bezpieczeństwa zaleca się ustawienie wszystkich tych opcji na false (domyślnie) i włączanie ich tylko w razie potrzeby. Zapobiegnie to niepożądanym zachowaniom, takim jak wyczerpywanie przez użytkowników konta płatnika opłat lub spalanie tokenów z konta płatnika opłat. Zapobiega to:

  • Wyczerpaniu konta: Użytkownicy przenoszący SOL lub tokeny z konta płatnika opłat
  • Przejęciu uprawnień: Użytkownicy zmieniający uprawnienia na kontach należących do płatnika opłat
  • Nieautoryzowanemu mintowaniu: Użytkownicy mintujący tokeny, jeśli płatnik opłat ma uprawnienia do mintowania
  • Manipulacji kontami: Użytkownicy zamrażający, zamykający lub modyfikujący konta kontrolowane przez płatnika opłat

Najlepsza praktyka: Zacznij od wyłączonych wszystkich uprawnień i włączaj tylko minimalny zestaw niezbędny do Twojego konkretnego przypadku użycia.

Konfiguracja cen (opcjonalnie)

Sekcja [validation.price] definiuje sposób obliczania opłat transakcyjnych. Dostępne są trzy modele cenowe:

  • Wycena z marżą (domyślnie) - Dodanie procentowej marży do rzeczywistych opłat sieciowych (domyślna marża wynosi 0.0)
  • Wycena stała - Pobieranie stałej kwoty w określonym tokenie niezależnie od opłat sieciowych
  • Wycena darmowa - Sponsorowanie wszystkich opłat transakcyjnych (brak opłat dla użytkowników)
OpcjaOpisWymaganeTyp
typeModel cenowy do użycia"margin", "fixed" lub "free"
marginProcent marży do dodania do opłat sieciowych(gdy type to "margin")number
amountStała kwota do pobrania w podstawowych jednostkach tokena(gdy type to "fixed")number
tokenMint tokena, w którym pobierana jest opłata(gdy type to "fixed")ciąg zakodowany b58

Wycena z marżą

Dodaj procentową marżę do rzeczywistych opłat sieciowych:

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

Cena stała

OSTRZEŻENIE BEZPIECZEŃSTWA: Cena stała NIE uwzględnia wypływu płatnika opłat w naliczonej kwocie. Może to umożliwić użytkownikom opróżnienie konta płatnika opłat, jeśli nie jest prawidłowo skonfigurowane.

Nalicz stałą kwotę w określonym tokenie, niezależnie od opłat sieciowych:

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

Darmowe transakcje

Sponsoruj wszystkie opłaty transakcyjne (brak opłat dla użytkowników):

[validation.price]
type = "free"

Środki bezpieczeństwa przy stosowaniu stałej/darmowej wyceny

  1. Wyłącz wszystkie operacje transferu i operacje pieniężne - Zapobiegnij używaniu płatnika opłat jako źródła w transferach:

    [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. Włącz uwierzytelnianie - Użyj uwierzytelniania, aby zapobiec nadużyciom:

    [kora.auth]
    api_key = "your-secure-api-key"
    # or
    hmac_secret = "your-minimum-32-character-hmac-secret"
  3. Ustaw konserwatywne limity - Zminimalizuj narażenie:

    [validation]
    max_allowed_lamports = 1000000 # 0.001 SOL maximum

OSTRZEŻENIE: Szczególnie niebezpieczne operacje przy stosowaniu stałej/darmowej wyceny:

  • allow_mint_to: Może umożliwić nieograniczone tworzenie tokenów, jeśli płatnik opłat ma uprawnienia do mintowania
  • allow_set_authority: Może przenieść kontrolę nad kluczowymi kontami na atakujących
  • allow_transfer: Umożliwia bezpośrednie opróżnianie sald tokenów płatnika opłat
  • allow_close_account: Zwraca rent na konta kontrolowane przez atakującego

Monitorowanie wydajności (opcjonalne)

Sekcja [metrics] konfiguruje zbieranie i monitorowanie metryk. Ta sekcja jest opcjonalna i domyślnie metryki są wyłączone.

[metrics]
enabled = true
endpoint = "/metrics"
port = 8080
scrape_interval = 60
[metrics.fee_payer_balance]
enabled = true
expiry_seconds = 30
OpcjaOpisWymaganeTyp
enabledWłącz zbieranie metrykboolean
endpointNiestandardowa ścieżka punktu końcowego metrykstring
portPort punktu końcowego metryknumber
scrape_intervalCzęstotliwość skanowania Prometheus (sekundy)number

Śledzenie Salda Płatnika Opłat

Sekcja [metrics.fee_payer_balance] konfiguruje automatyczne monitorowanie salda SOL Twojego płatnika opłat:

OpcjaOpisWymaganeTyp
enabledWłącz śledzenie salda płatnika opłat❌ (domyślnie: false)boolean
expiry_secondsInterwał śledzenia w tle w sekundach❌ (domyślnie: 30)number

Po włączeniu, Kora automatycznie śledzi saldo SOL Twojego płatnika opłat i udostępnia je za pośrednictwem wskaźnika Prometheus fee_payer_balance_lamports. Pomaga to w planowaniu pojemności i alertowaniu o niskim saldzie.

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

→ Przewodnik Referencyjny Monitorowania Kora

Pełny Przykład

Oto konfiguracja gotowa do produkcji z najlepszymi praktykami bezpieczeństwa:

# 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

Walidacja Konfiguracji

Kora waliduje Twoją konfigurację przy uruchomieniu. Jeśli chcesz zwalidować swoją konfigurację bez uruchamiania serwera, możesz użyć polecenia walidacji konfiguracji:

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

Możesz również uruchomić polecenie validate-with-rpc, aby zwalidować swoją konfigurację z serwerem RPC (ta kontrola walidacyjna jest nieco wolniejsza, ale wykonuje bardziej dokładne sprawdzanie kont)

Uruchamianie Serwera

Po skonfigurowaniu pliku kora.toml możesz uruchomić serwer Kora:

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

Flaga --no-load-signer zainicjalizuje serwer bez ładowania podpisujących. Jest to przydatne do testowania konfiguracji. Aby załadować podpisujących, musisz skonfigurować plik signers.toml. Minimalna konfiguracja z jednym podpisującym wyglądałaby następująco:

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

Spowoduje to załadowanie jednego podpisującego ze zmiennej środowiskowej MY_SIGNER_PRIVATE_KEY. Następnie możesz uruchomić serwer za pomocą:

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

Aby uzyskać więcej informacji i zaawansowaną konfigurację signerów, zobacz Przewodnik po signerach.

Najlepsze praktyki

  1. Zacznij restrykcyjnie: Rozpocznij od ścisłych limitów i stopniowo je zwiększaj
  2. Monitoruj użycie: Śledź, które programy i tokeny są faktycznie wykorzystywane
  3. Regularne aktualizacje: Przeglądaj i aktualizuj listy blokad oraz limity
  4. Testuj zmiany: Waliduj zmiany konfiguracji najpierw w środowisku staging
  5. Wersjonowanie: Prowadź changelog swoich zmian konfiguracyjnych

Potrzebujesz pomocy?

Is this page helpful?

Zarządzane przez

© 2026 Solana Foundation.
Wszelkie prawa zastrzeżone.
Bądź na bieżąco