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:
- Podstawowe zasady Kora - Główne ustawienia serwera
- Uwierzytelnianie Kora - Ustawienia uwierzytelniania
- Buforowanie Kora - Buforowanie Redis dla wywołań RPC
- Limity użytkowania Kora - Ograniczenia transakcji na portfel
- Włączone metody Kora - Metody RPC Kora do włączenia
- Zasady walidacji - Walidacja i bezpieczeństwo transakcji
- Blokowanie rozszerzeń Token-2022 - Blokuj ryzykowne rozszerzenia Token-2022
- Zasady płatnika opłat - Ograniczenia dla portfela płatnika opłat
- Konfiguracja cen - Modele wyceny opłat transakcyjnych
- Monitorowanie wydajności - Zbieranie metryk i monitorowanie
- Kompletny przykład - Pełna konfiguracja produkcyjna
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 = 100payment_address = "YourPaymentAddressPubkey11111111111111111111" # Optional
| Opcja | Opis | Wymagane | Typ |
|---|---|---|---|
rate_limit | Globalny limit żądań (żądań na sekundę) dla wszystkich klientów | ✅ | liczba |
payment_address | Opcjonalny 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
| Opcja | Opis | Wymagane | Typ |
|---|---|---|---|
api_key | Klucz API do prostego uwierzytelniania | ❌ | ciąg |
hmac_secret | Sekret HMAC do uwierzytelniania opartego na podpisie (min. 32 znaki) | ❌ | ciąg |
max_timestamp_age | Maksymalny wiek znacznika czasu HMAC w sekundach | ❌ (domyślnie: 300) | liczba |
Uwaga:
api_keyihmac_secretustawiają 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 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)
| Opcja | Opis | Wymagane | Typ |
|---|---|---|---|
enabled | Włącz buforowanie Redis dla wywołań RPC | ❌ (domyślnie: false) | boolean |
url | Adres URL połączenia Redis (wymagany po włączeniu) | ✅ | ciąg |
default_ttl | Domyślny TTL dla buforowanych wpisów w sekundach | ❌ (domyślnie: 300) | liczba |
account_ttl | TTL 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 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
| Opcja | Opis | Wymagane | Typ |
|---|---|---|---|
enabled | Włącz ograniczenia transakcji dla portfeli | ❌ (domyślnie: false) | boolean |
cache_url | Adres URL połączenia Redis do wspólnego śledzenia użycia | ❌ | string |
max_transactions | Maksymalna liczba transakcji na portfel (0 = bez limitu) | ❌ (domyślnie: 100) | number |
fallback_if_unavailable | Zezwalaj 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_unavailablema wartość true, system pozwala na realizację transakcji, jeśli Redis jest tymczasowo niedostępny, zapobiegając przerwaniu usługi. Ustawieniemax_transactionsna 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 = trueestimate_transaction_fee = trueget_supported_tokens = truesign_transaction = falsesign_and_send_transaction = falsetransfer_transaction = falseget_blockhash = trueget_config = trueget_payer_signer = true
| Opcja | Opis metody | Wymagane | Typ |
|---|---|---|---|
liveness | Endpoint sprawdzania stanu zdrowia | ✅ | boolean |
estimate_transaction_fee | Szacowanie opłaty za transakcję | ✅ | boolean |
get_supported_tokens | Wyświetlanie listy akceptowanych tokenów | ✅ | boolean |
sign_transaction | Podpisanie transakcji bez wysyłania jej do sieci | ✅ | boolean |
sign_and_send_transaction | Podpisanie transakcji i wysłanie jej do sieci | ✅ | boolean |
transfer_transaction | Obsługa transferów tokenów | ✅ | boolean |
get_blockhash | Pobranie najnowszego blockhash | ✅ | boolean |
get_config | Zwrócenie konfiguracji serwera Kora | ✅ | boolean |
Uwaga: jeśli ta sekcja jest uwzględniona w pliku
kora.toml, wszystkie metody muszą być jawnie ustawione natruelubfalse.
Polityki walidacji
Sekcja [validation] definiuje reguły bezpieczeństwa związane z Solana oraz
limity transakcji:
[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",]
| Opcja | Opis | Wymagane | Typ |
|---|---|---|---|
max_allowed_lamports | Ustawienie maksymalnej liczby lamportów na transakcję ogranicza ekspozycję węzła Kora na pojedynczą transakcję. | ✅ | number |
max_signatures | Podstawowe 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_source | Wyrocznia 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_transactions | Zezwolenie na trwałe transakcje nonce. Zobacz Względy bezpieczeństwa poniżej. | ❌ (domyślnie: false) | boolean |
allowed_programs | Programy Solana, z którymi transakcje mogą wchodzić w interakcje | ✅ | Tablica ciągów zakodowanych w b58 |
allowed_tokens | Minty tokenów, które mogą być używane w transakcjach | ✅ | Tablica ciągów zakodowanych w b58 |
allowed_spl_paid_tokens | Tokeny SPL akceptowane jako płatność za opłaty transakcyjne | ✅ | Tablica ciągów zakodowanych w b58 |
disallowed_accounts | Konta, które są wyraźnie zablokowane w transakcjach | ✅ | Tablica 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_tokensaby 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 rozszerzenia | Opis |
|---|---|
confidential_transfer_mint | Konfiguracja poufnych transferów dla mint |
confidential_mint_burn | Konfiguracja poufnego wybijania i spalania |
transfer_fee_config | Konfiguracja opłat za transfer |
mint_close_authority | Uprawnienie do zamknięcia mint |
interest_bearing_config | Konfiguracja tokenów oprocentowanych |
non_transferable | Czyni tokeny niezbywalnymi |
permanent_delegate | Stały delegat dla mint |
transfer_hook | Program niestandardowego hooka transferu |
pausable | Konfiguracja wstrzymywalnych tokenów |
Dostępne rozszerzenia konta
| Nazwa rozszerzenia | Opis |
|---|---|
confidential_transfer_account | Stan poufnych transferów dla konta |
non_transferable_account | Konto tokenów niezbywalnych |
transfer_hook_account | Stan hooka transferu dla konta |
pausable_account | Stan konta wstrzymywalnych tokenów |
memo_transfer | Wymaga notatki do transferów |
cpi_guard | Zapobiega określonym wywołaniom CPI |
immutable_owner | Właściciel konta nie może zostać zmieniony |
default_account_state | Domyś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_extensionsw [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/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
Instrukcje System Program
| Opcja | Opis | Domyślnie | Typ |
|---|---|---|---|
allow_transfer | Zezwól płatnikowi opłat jako nadawcy w instrukcjach Transfer/TransferWithSeed | false | boolean |
allow_assign | Zezwól płatnikowi opłat jako uprawnionemu w instrukcjach Assign/AssignWithSeed | false | boolean |
allow_create_account | Zezwól płatnikowi opłat jako finansującemu w instrukcjach CreateAccount/CreateAccountWithSeed | false | boolean |
allow_allocate | Zezwól płatnikowi opłat jako właścicielowi konta w instrukcjach Allocate/AllocateWithSeed | false | boolean |
nonce.allow_initialize | Zezwól na ustawienie płatnika opłat jako uprawnionego nonce w InitializeNonceAccount | false | boolean |
nonce.allow_advance | Zezwól płatnikowi opłat jako uprawnionemu w AdvanceNonceAccount | false | boolean |
nonce.allow_authorize | Zezwól płatnikowi opłat jako aktualnemu uprawnionemu w AuthorizeNonceAccount | false | boolean |
nonce.allow_withdraw | Zezwól płatnikowi opłat jako uprawnionemu w WithdrawNonceAccount | false | boolean |
Instrukcje Token Program
| Opcja | Opis | Domyślnie | Typ |
|---|---|---|---|
allow_transfer | Zezwól płatnikowi opłat jako właścicielowi w instrukcjach Transfer/TransferChecked | false | boolean |
allow_burn | Zezwól płatnikowi opłat jako właścicielowi w instrukcjach Burn/BurnChecked | false | boolean |
allow_close_account | Zezwól płatnikowi opłat jako właścicielowi w instrukcjach CloseAccount | false | boolean |
allow_approve | Zezwól płatnikowi opłat jako właścicielowi w instrukcjach Approve/ApproveChecked | false | boolean |
allow_revoke | Zezwól płatnikowi opłat jako właścicielowi w instrukcjach Revoke | false | boolean |
allow_set_authority | Zezwól płatnikowi opłat jako aktualnemu uprawnionemu w instrukcjach SetAuthority | false | boolean |
allow_mint_to | Zezwól płatnikowi opłat jako uprawnionemu do bicia w instrukcjach MintTo/MintToChecked | false | boolean |
allow_initialize_mint | Zezwól płatnikowi opłat jako uprawnionemu do bicia w instrukcjach InitializeMint/InitializeMint2 | false | boolean |
allow_initialize_account | Zezwól płatnikowi opłat jako właścicielowi w instrukcjach InitializeAccount/InitializeAccount3 | false | boolean |
allow_initialize_multisig | Zezwól płatnikowi opłat jako sygnatariuszowi w instrukcjach InitializeMultisig/InitializeMultisig2 | false | boolean |
allow_freeze_account | Zezwól płatnikowi opłat jako uprawnionemu do zamrażania w instrukcjach FreezeAccount | false | boolean |
allow_thaw_account | Zezwól płatnikowi opłat jako uprawnionemu do zamrażania w instrukcjach ThawAccount | false | boolean |
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)
| Opcja | Opis | Wymagane | Typ |
|---|---|---|---|
type | Model cenowy do użycia | ✅ | "margin", "fixed" lub "free" |
margin | Procent marży do dodania do opłat sieciowych | (gdy type to "margin") | number |
amount | Stała kwota do pobrania w podstawowych jednostkach tokena | (gdy type to "fixed") | number |
token | Mint 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 unitstoken = "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
-
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 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 -
Włącz uwierzytelnianie - Użyj uwierzytelniania, aby zapobiec nadużyciom:
[kora.auth]api_key = "your-secure-api-key"# orhmac_secret = "your-minimum-32-character-hmac-secret" -
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 mintowaniaallow_set_authority: Może przenieść kontrolę nad kluczowymi kontami na atakującychallow_transfer: Umożliwia bezpośrednie opróżnianie sald tokenów płatnika opłatallow_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 = trueendpoint = "/metrics"port = 8080scrape_interval = 60[metrics.fee_payer_balance]enabled = trueexpiry_seconds = 30
| Opcja | Opis | Wymagane | Typ |
|---|---|---|---|
enabled | Włącz zbieranie metryk | ✅ | boolean |
endpoint | Niestandardowa ścieżka punktu końcowego metryk | ✅ | string |
port | Port punktu końcowego metryk | ✅ | number |
scrape_interval | Czę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:
| Opcja | Opis | Wymagane | Typ |
|---|---|---|---|
enabled | Włącz śledzenie salda płatnika opłat | ❌ (domyślnie: false) | boolean |
expiry_seconds | Interwał ś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 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
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, weightedstrategy = "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
- Zacznij restrykcyjnie: Rozpocznij od ścisłych limitów i stopniowo je zwiększaj
- Monitoruj użycie: Śledź, które programy i tokeny są faktycznie wykorzystywane
- Regularne aktualizacje: Przeglądaj i aktualizuj listy blokad oraz limity
- Testuj zmiany: Waliduj zmiany konfiguracji najpierw w środowisku staging
- Wersjonowanie: Prowadź changelog swoich zmian konfiguracyjnych
Potrzebujesz pomocy?
- Sprawdź Przewodnik po uwierzytelnianiu w celu konfiguracji uwierzytelniania
- Sprawdź Przewodnik po signerach w celu konfiguracji signerów
- Sprawdź Przewodnik operatora, aby uzyskać więcej informacji o uruchamianiu węzła Kora
- Odwiedź Solana Stack Exchange z tagiem
kora - Zgłaszaj problemy na GitHubie
Is this page helpful?