Διαμόρφωση

Χρησιμοποιείτε το Kora v2.2.0-beta; Δείτε τη Διαμόρφωση Beta για νέες επιλογές: Δέσμες Jito, προστασία Lighthouse, reCAPTCHA και όρια χρήσης.

Ο κόμβος Kora σας θα υπογράφει συναλλαγές για τους χρήστες σας, επομένως είναι σημαντικό να τον διαμορφώσετε ώστε να υπογράφει μόνο συναλλαγές που πληρούν τις επιχειρηματικές σας απαιτήσεις. Το Kora σας δίνει μεγάλη ευελιξία στον τρόπο διαμόρφωσης του κόμβου σας, αλλά είναι σημαντικό να κατανοήσετε τις επιπτώσεις της διαμόρφωσής σας. Το kora.toml είναι το κέντρο ελέγχου για τη διαμόρφωση του Kora. Αυτό το έγγραφο παρέχει μια ολοκληρωμένη αναφορά για τη διαμόρφωση του κόμβου paymaster Kora μέσω του αρχείου διαμόρφωσης kora.toml.

Επισκόπηση

Το αρχείο kora.toml ελέγχει όλες τις πτυχές της συμπεριφοράς του κόμβου Kora σας περιλαμβανομένων:

  • Περιορισμός ρυθμού και έλεγχος ταυτότητας
  • Διαθεσιμότητα μεθόδων RPC
  • Κανόνες επικύρωσης συναλλαγών
  • Μοντέλα τιμολόγησης τελών
  • Πολιτικές ασφαλείας
  • Διαθεσιμότητα μεθόδων RPC
  • Μοντέλα τιμολόγησης τελών
  • Διαμόρφωση διεύθυνσης πληρωμής
  • Παρακολούθηση επιδόσεων

Το αρχείο διαμόρφωσής σας θα πρέπει να τοποθετηθεί στον κατάλογο ανάπτυξής σας ή να καθοριστεί μέσω της σημαίας --config κατά την εκκίνηση του διακομιστή.

Ενότητες Διαμόρφωσης

Το αρχείο kora.toml είναι οργανωμένο σε ενότητες, η καθεμία με το δικό της σύνολο επιλογών. Αυτός ο οδηγός περιηγείται σε κάθε ενότητα και εξηγεί τις διαθέσιμες επιλογές:

Δείγμα τμημάτων αρχείου 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

Βασικές Πολιτικές Kora

Το τμήμα [kora] διαμορφώνει τη βασική συμπεριφορά του διακομιστή:

[kora]
rate_limit = 100
payment_address = "YourPaymentAddressPubkey11111111111111111111" # Optional
ΕπιλογήΠεριγραφήΑπαιτείταιΤύπος
rate_limitΓενικό όριο ρυθμού (αιτήματα ανά δευτερόλεπτο) σε όλους τους πελάτεςαριθμός
payment_addressΠροαιρετική διεύθυνση πληρωμής για λήψη tokens πληρωμής (προεπιλεγμένη η διεύθυνση υπογραφέα εάν δεν καθοριστεί)συμβολοσειρά κωδικοποιημένη σε b58

Έλεγχος Ταυτότητας Kora

Το τμήμα [kora.auth] διαμορφώνει τον έλεγχο ταυτότητας για τον διακομιστή Kora:

[kora.auth]
api_key = "kora_live_sk_1234567890abcdef"
hmac_secret = "kora_hmac_your-strong-hmac-secret-key-here"
max_timestamp_age = 300
ΕπιλογήΠεριγραφήΑπαιτείταιΤύπος
api_keyΚλειδί API για απλό έλεγχο ταυτότηταςσυμβολοσειρά
hmac_secretΜυστικό HMAC για έλεγχο ταυτότητας βάσει υπογραφής (ελάχιστο 32 χαρακτήρες)συμβολοσειρά
max_timestamp_ageΜέγιστη ηλικία χρονικής σήμανσης HMAC σε δευτερόλεπτα❌ (προεπιλογή: 300)αριθμός

Σημείωση: Τα api_key και hmac_secret ορίζουν μια γενική πολιτική ελέγχου ταυτότητας για όλους τους πελάτες. Για λεπτομερή ρύθμιση ελέγχου ταυτότητας, ανατρέξτε στον Οδηγό Ελέγχου Ταυτότητας.

Προσωρινή Αποθήκευση Kora (προαιρετικό)

Το τμήμα [kora.cache] διαμορφώνει την προσωρινή αποθήκευση βασισμένη σε Redis για κλήσεις Solana RPC. Αυτό μπορεί να βελτιώσει σημαντικά την απόδοση μειώνοντας τις περιττές ανακτήσεις δεδομένων λογαριασμών:

[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)
ΕπιλογήΠεριγραφήΑπαιτείταιΤύπος
enabledΕνεργοποίηση προσωρινής αποθήκευσης Redis για κλήσεις RPC❌ (προεπιλογή: false)boolean
urlURL σύνδεσης Redis (απαιτείται όταν είναι ενεργοποιημένο)συμβολοσειρά
default_ttlΠροεπιλεγμένο TTL για καταχωρήσεις προσωρινής μνήμης σε δευτερόλεπτα❌ (προεπιλογή: 300)αριθμός
account_ttlTTL για προσωρινή μνήμη δεδομένων λογαριασμού σε δευτερόλεπτα❌ (προεπιλογή: 60)αριθμός

Σημείωση: Όταν η προσωρινή αποθήκευση είναι ενεργοποιημένη, πρέπει να είναι διαθέσιμη μια παρουσία Redis στη καθορισμένη διεύθυνση URL. Η προσωρινή αποθήκευση επιστρέφει ομαλά σε απευθείας κλήσεις RPC εάν η Redis δεν είναι διαθέσιμη.

Όρια Χρήσης Kora (προαιρετικό)

Η ενότητα [kora.usage_limit] ρυθμίζει τον περιορισμό συναλλαγών ανά πορτοφόλι για να αποτρέψει την κατάχρηση και να εξασφαλίσει δίκαιη χρήση σε όλους τους χρήστες σας. Αυτό θα μπορούσε επίσης να χρησιμοποιηθεί για τη δημιουργία προγραμμάτων ανταμοιβών για την επιδότηση των τελών συναλλαγών των χρηστών μέχρι ένα συγκεκριμένο όριο.

Σημαντικό: Επί του παρόντος, η μόνη μορφή περιορισμού χρήσης που υποστηρίζεται από το Kora είναι ένα μόνιμο όριο. Μόλις ένα πορτοφόλι φτάσει το όριο συναλλαγών του, δεν μπορεί να επαναφερθεί και ο χρήστης δεν θα μπορεί πλέον να υποβάλει άλλες συναλλαγές χρησιμοποιώντας το ίδιο πορτοφόλι. Αυτό το όριο παραμένει μέχρι να διαγραφεί χειροκίνητα από τη Redis ή να επαναφερθούν τα δεδομένα της Redis.

Σημείωση: Αυτή η λειτουργία απαιτεί Redis όταν είναι ενεργοποιημένη σε πολλαπλές παρουσίες 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
ΕπιλογήΠεριγραφήΑπαιτείταιΤύπος
enabledΕνεργοποίηση περιορισμού συναλλαγών ανά πορτοφόλι❌ (προεπιλογή: false)boolean
cache_urlΔιεύθυνση URL σύνδεσης Redis για κοινόχρηστη παρακολούθηση χρήσηςstring
max_transactionsΜέγιστες συναλλαγές ανά πορτοφόλι (0 = απεριόριστες)❌ (προεπιλογή: 100)number
fallback_if_unavailableΝα επιτρέπονται συναλλαγές εάν η Redis δεν είναι διαθέσιμη❌ (προεπιλογή: true)boolean

Σημείωση: Τα όρια χρήσης παρακολουθούνται ανά διεύθυνση πορτοφολιού με αυτόματη λήξη βάσει TTL. Όταν το fallback_if_unavailable είναι true, το σύστημα επιτρέπει τις συναλλαγές να προχωρήσουν εάν η Redis είναι προσωρινά μη διαθέσιμη, αποτρέποντας τη διακοπή της υπηρεσίας. Ορίζοντας το max_transactions σε 0 θα επιτρέψει απεριόριστες συναλλαγές.

Μέθοδοι με Ενεργοποιημένο Kora (προαιρετικό)

Η ενότητα [kora.enabled_methods] ελέγχει ποιες μέθοδοι RPC είναι ενεργοποιημένες. Αυτή η ενότητα είναι προαιρετική και από προεπιλογή, όλες οι μέθοδοι είναι ενεργοποιημένες. Κάθε μέθοδος μπορεί να ενεργοποιηθεί ή να απενεργοποιηθεί ορίζοντας την τιμή σε true ή 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
ΕπιλογήΠεριγραφή ΜεθόδουΑπαραίτητοΤύπος
livenessΣημείο ελέγχου κατάστασηςboolean
estimate_transaction_feeΕκτίμηση της χρέωσης για μια συναλλαγήboolean
get_supported_tokensΛίστα αποδεκτών tokensboolean
sign_transactionΥπογραφή συναλλαγής χωρίς αποστολή στο δίκτυοboolean
sign_and_send_transactionΥπογραφή συναλλαγής και αποστολή στο δίκτυοboolean
transfer_transactionΔιαχείριση μεταφορών tokensboolean
get_blockhashΛήψη πρόσφατου blockhashboolean
get_configΕπιστροφή της διαμόρφωσης του διακομιστή Koraboolean

Σημείωση: εάν αυτή η ενότητα συμπεριλαμβάνεται στο αρχείο kora.toml σας, όλες οι μέθοδοι πρέπει ρητά να οριστούν σε true ή false.

Πολιτικές Επικύρωσης

Η ενότητα [validation] ορίζει κανόνες ασφαλείας που σχετίζονται με το Solana και όρια συναλλαγών:

[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",
]
ΕπιλογήΠεριγραφήΑπαραίτητοΤύπος
max_allowed_lamportsΟ ορισμός μέγιστου αριθμού lamports ανά συναλλαγή περιορίζει την έκθεση του κόμβου Kora σε μία μεμονωμένη συναλλαγή.number
max_signaturesΟι βασικές χρεώσεις του Solana είναι συνάρτηση του αριθμού των υπογραφών σε μια συναλλαγή, επομένως ο ορισμός μέγιστου αριθμού υπογραφών ανά συναλλαγή είναι ένας καλός τρόπος να αποτραπούν οι χρήστες από το να ξοδεύουν πολύ SOL σε μία συναλλαγή.number
price_sourceOracle για δεδομένα τιμών tokens. Σημείωση: Όταν ορίζεται σε "Jupiter", η μεταβλητή περιβάλλοντος JUPITER_API_KEY είναι απαραίτητη. Ο διακομιστής θα αποτύχει να ξεκινήσει χωρίς αυτήν."Jupiter" ή "Mock"
allow_durable_transactionsΕπιτρέπει συναλλαγές με ανθεκτικό nonce. Δείτε Ζητήματα Ασφαλείας παρακάτω.❌ (προεπιλογή: false)boolean
allowed_programsΠρογράμματα Solana με τα οποία μπορούν να αλληλεπιδράσουν οι συναλλαγέςΠίνακας από συμβολοσειρές b58
allowed_tokensToken mints που μπορούν να χρησιμοποιηθούν σε συναλλαγέςΠίνακας από συμβολοσειρές b58
allowed_spl_paid_tokensSPL tokens που γίνονται δεκτά ως πληρωμή για χρεώσεις συναλλαγώνΠίνακας από συμβολοσειρές b58
disallowed_accountsΛογαριασμοί που αποκλείονται ρητά από συναλλαγέςΠίνακας από συμβολοσειρές b58

Σημείωση: Επιτρέπονται κενοί πίνακες, αλλά θα πρέπει να ορίσετε τουλάχιστον ένα allowed_programs, allowed_tokens, allowed_spl_paid_tokens στη λίστα επιτρεπόμενων για να μπορεί ο κόμβος Kora να επεξεργαστεί συναλλαγές. Πρέπει να ορίσετε το System Program ή το Token Program για να μπορεί ο κόμβος Kora να επεξεργαστεί μεταφορές. Για να ενεργοποιήσετε κοινούς τύπους εντολών (π.χ., Compute Budget, Address Lookup Table), πρέπει να ορίσετε το Compute Budget Program ή το Address Lookup Table Program κ.λπ.

Ασφάλεια Ανθεκτικών Συναλλαγών

ΠΡΟΕΙΔΟΠΟΙΗΣΗ ΑΣΦΑΛΕΙΑΣ: Οι ανθεκτικές συναλλαγές nonce επιτρέπουν την αόριστη διατήρηση υπογεγραμμένων συναλλαγών και την υποβολή τους αργότερα. Αυτό θα μπορούσε να χρησιμοποιηθεί ως οικονομικό διάνυσμα επίθεσης όπου κάποιος θα μπορούσε να αποκτήσει μια υπογεγραμμένη συναλλαγή και να περιμένει να την υποβάλει όταν οι συνθήκες της αγοράς είναι ευνοϊκές γι' αυτόν (π.χ., όταν η αξία του SOL έχει πέσει ή η αξία του token πληρωμής έχει αυξηθεί).

Από προεπιλογή, το allow_durable_transactions έχει οριστεί σε false για να αποκλείει όλες τις ανθεκτικές συναλλαγές nonce. Ενεργοποιήστε αυτό μόνο εάν η εφαρμογή σας απαιτεί συγκεκριμένα ανθεκτικές συναλλαγές και κατανοείτε τους κινδύνους.

Εάν πρέπει να ενεργοποιήσετε ανθεκτικές συναλλαγές, εξετάστε τα εξής:

  • Χρησιμοποιήστε έλεγχο ταυτότητας για να περιορίσετε την πρόσβαση API
  • Εφαρμόστε πρόσθετη επικύρωση εκτός αλυσίδας
  • Παρακολουθήστε για ασυνήθιστα μοτίβα συναλλαγών
  • Παρακολουθήστε και περιορίστε τα υπόλοιπα των λογαριασμών υπογραφής
  • Εναλλάσσετε τακτικά τα κλειδιά υπογραφής

Μάθετε περισσότερα για τις ανθεκτικές συναλλαγές nonce στο Solana Docs.

Αποκλεισμός Επεκτάσεων Token-2022

Η ενότητα [validation.token2022] σάς επιτρέπει να αποκλείσετε συγκεκριμένες επεκτάσεις Token-2022 για ενισχυμένη ασφάλεια. Όλες οι επεκτάσεις είναι ενεργοποιημένες από προεπιλογή. Μπορείτε να αποκλείσετε συγκεκριμένες επεκτάσεις προσθέτοντάς τες στους πίνακες blocked_mint_extensions ή 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
]

Διαθέσιμες Επεκτάσεις Mint

Όνομα ΕπέκτασηςΠεριγραφή
confidential_transfer_mintΔιαμόρφωση εμπιστευτικής μεταφοράς για το mint
confidential_mint_burnΔιαμόρφωση εμπιστευτικού mint και καύσης
transfer_fee_configΔιαμόρφωση προμήθειας μεταφοράς
mint_close_authorityΑρχή με δικαίωμα κλεισίματος του mint
interest_bearing_configΔιαμόρφωση token με επιτόκιο
non_transferableΚαθιστά τα tokens μη μεταβιβάσιμα
permanent_delegateΜόνιμος εκπρόσωπος για το mint
transfer_hookΠροσαρμοσμένο πρόγραμμα hook μεταφοράς
pausableΔιαμόρφωση token με δυνατότητα παύσης

Διαθέσιμες Επεκτάσεις Λογαριασμού

Όνομα ΕπέκτασηςΠεριγραφή
confidential_transfer_accountΚατάσταση εμπιστευτικής μεταφοράς για τον λογαριασμό
non_transferable_accountΛογαριασμός token μη μεταβιβάσιμου
transfer_hook_accountΚατάσταση hook μεταφοράς για τον λογαριασμό
pausable_accountΚατάσταση λογαριασμού token με δυνατότητα παύσης
memo_transferΑπαιτεί σημείωση για μεταφορές
cpi_guardΑποτρέπει ορισμένες κλήσεις CPI
immutable_ownerΟ ιδιοκτήτης του λογαριασμού δεν μπορεί να αλλάξει
default_account_stateΠροεπιλεγμένη κατάσταση για νέους λογαριασμούς

transfer_hook

Ζητήματα Ασφάλειας

Επέκταση PermanentDelegate - Τα tokens με αυτήν την επέκταση επιτρέπουν στον εκπρόσωπο να μεταφέρει/καίει tokens ανά πάσα στιγμή χωρίς έγκριση του ιδιοκτήτη. Αυτό δημιουργεί σημαντικούς κινδύνους για τον χειριστή κόμβου Kora καθώς τα χρήματα πληρωμής μπορούν να κατασχεθούν μετά την πληρωμή.

  • Εξετάστε το ενδεχόμενο προσθήκης του "permanent_delegate" στο blocked_mint_extensions στο [validation.token2022] εκτός αν χρειάζεται ρητά για την περίπτωση χρήσης σας.
  • Αποφύγετε τη χρήση tokens πληρωμής με την επέκταση permanent_delegate.

Πολιτική Πληρωτή Τελών

Η ενότητα [validation.fee_payer_policy] παρέχει λεπτομερή έλεγχο σχετικά με τις ενέργειες που μπορεί να εκτελέσει το πορτοφόλι πληρωτή τελών του κόμβου Kora σας. Η πολιτική οργανώνεται ανά τύπο προγράμματος (System Program, Token Program, Token-2022) και καλύπτει όλους τους διαφορετικούς τύπους εντολών. Αυτό αποτρέπει απροσδόκητη συμπεριφορά από συναλλαγές χρηστών που χρησιμοποιούν τον κόμβο Kora σας ως υπογράφοντα.

Για παράδειγμα, εάν το spl_token.allow_transfer έχει οριστεί σε false, ο κόμβος Kora δεν θα υπογράφει συναλλαγές που περιλαμβάνουν μεταφορά SPL token όπου ο πληρωτής τελών του κόμβου Kora είναι η εξουσία μεταφοράς.

[validation.fee_payer_policy.system]
allow_transfer = false # System Transfer/TransferWithSeed
allow_assign = false # System Assign/AssignWithSeed
allow_create_account = false # System CreateAccount/CreateAccountWithSeed
allow_allocate = false # System Allocate/AllocateWithSeed
[validation.fee_payer_policy.system.nonce]
allow_initialize = false # InitializeNonceAccount
allow_advance = false # AdvanceNonceAccount
allow_authorize = false # AuthorizeNonceAccount
allow_withdraw = false # WithdrawNonceAccount
[validation.fee_payer_policy.spl_token]
allow_transfer = false # Transfer/TransferChecked
allow_burn = false # Burn/BurnChecked
allow_close_account = false # CloseAccount
allow_approve = false # Approve/ApproveChecked
allow_revoke = false # Revoke
allow_set_authority = false # SetAuthority
allow_mint_to = false # MintTo/MintToChecked
allow_initialize_mint = false # InitializeMint/InitializeMint2
allow_initialize_account = false # InitializeAccount/InitializeAccount3
allow_initialize_multisig = false # InitializeMultisig/InitializeMultisig2
allow_freeze_account = false # FreezeAccount
allow_thaw_account = false # ThawAccount
[validation.fee_payer_policy.token_2022]
allow_transfer = false # Transfer/TransferChecked
allow_burn = false # Burn/BurnChecked
allow_close_account = false # CloseAccount
allow_approve = false # Approve/ApproveChecked
allow_revoke = false # Revoke
allow_set_authority = false # SetAuthority
allow_mint_to = false # MintTo/MintToChecked
allow_initialize_mint = false # InitializeMint/InitializeMint2
allow_initialize_account = false # InitializeAccount/InitializeAccount3
allow_initialize_multisig = false # InitializeMultisig/InitializeMultisig2
allow_freeze_account = false # FreezeAccount
allow_thaw_account = false # ThawAccount

Εντολές System Program

ΕπιλογήΠεριγραφήΠροεπιλογήΤύπος
allow_transferΕπιτρέπει τον πληρωτή τελών ως αποστολέα σε εντολές Transfer/TransferWithSeedfalseboolean
allow_assignΕπιτρέπει τον πληρωτή τελών ως εξουσία σε εντολές Assign/AssignWithSeedfalseboolean
allow_create_accountΕπιτρέπει τον πληρωτή τελών ως πληρωτή χρηματοδότησης σε εντολές CreateAccount/CreateAccountWithSeedfalseboolean
allow_allocateΕπιτρέπει τον πληρωτή τελών ως κάτοχο λογαριασμού σε εντολές Allocate/AllocateWithSeedfalseboolean
nonce.allow_initializeΕπιτρέπει τον πληρωτή τελών να οριστεί ως εξουσία nonce στην InitializeNonceAccountfalseboolean
nonce.allow_advanceΕπιτρέπει τον πληρωτή τελών ως εξουσία στην AdvanceNonceAccountfalseboolean
nonce.allow_authorizeΕπιτρέπει τον πληρωτή τελών ως τρέχουσα εξουσία στην AuthorizeNonceAccountfalseboolean
nonce.allow_withdrawΕπιτρέπει τον πληρωτή τελών ως εξουσία στην WithdrawNonceAccountfalseboolean

Εντολές Token Program

ΕπιλογήΠεριγραφήΠροεπιλογήΤύπος
allow_transferΕπιτρέπει τον πληρωτή τελών ως κάτοχο σε εντολές Transfer/TransferCheckedfalseboolean
allow_burnΕπιτρέπει τον πληρωτή τελών ως κάτοχο σε εντολές Burn/BurnCheckedfalseboolean
allow_close_accountΕπιτρέπει τον πληρωτή τελών ως κάτοχο σε εντολές CloseAccountfalseboolean
allow_approveΕπιτρέπει τον πληρωτή τελών ως κάτοχο σε εντολές Approve/ApproveCheckedfalseboolean
allow_revokeΕπιτρέπει τον πληρωτή τελών ως κάτοχο σε εντολές Revokefalseboolean
allow_set_authorityΕπιτρέπει τον πληρωτή τελών ως τρέχουσα εξουσία σε εντολές SetAuthorityfalseboolean
allow_mint_toΕπιτρέπει τον πληρωτή τελών ως εξουσία mint σε εντολές MintTo/MintToCheckedfalseboolean
allow_initialize_mintΕπιτρέπει τον πληρωτή τελών ως εξουσία mint σε εντολές InitializeMint/InitializeMint2falseboolean
allow_initialize_accountΕπιτρέπει τον πληρωτή τελών ως κάτοχο σε εντολές InitializeAccount/InitializeAccount3falseboolean
allow_initialize_multisigΕπιτρέπει τον πληρωτή τελών ως υπογράφοντα σε εντολές InitializeMultisig/InitializeMultisig2falseboolean
allow_freeze_accountΕπιτρέπει τον πληρωτή τελών ως εξουσία πάγωσης σε εντολές FreezeAccountfalseboolean
allow_thaw_accountΕπιτρέπει τον πληρωτή τελών ως εξουσία πάγωσης σε εντολές ThawAccountfalseboolean

Το Token-2022 υποστηρίζει το ίδιο σύνολο εντολών με το SPL Token με πανομοιότυπες επιλογές διαμόρφωσης (στην ενότητα [validation.fee_payer_policy.token_2022]).

Θέματα Ασφάλειας

ΠΡΟΕΙΔΟΠΟΙΗΣΗ ΑΣΦΑΛΕΙΑΣ: Για λόγους ασφαλείας, συνιστάται να ορίσετε όλα αυτά σε false (προεπιλογή) και να τα ενεργοποιήσετε μόνο όταν χρειάζεται. Αυτό θα αποτρέψει ανεπιθύμητη συμπεριφορά όπως η εξάντληση του λογαριασμού πληρωτή χρεώσεων από χρήστες ή η καύση tokens από τον λογαριασμό πληρωτή χρεώσεων. Αυτό αποτρέπει:

  • Εξάντληση Λογαριασμού: Χρήστες που μεταφέρουν SOL ή tokens από τον λογαριασμό πληρωτή χρεώσεων σας
  • Κατάληψη Εξουσιοδότησης: Χρήστες που αλλάζουν εξουσιοδοτήσεις σε λογαριασμούς που ανήκουν στον πληρωτή χρεώσεων σας
  • Μη Εξουσιοδοτημένη Έκδοση: Χρήστες που εκδίδουν tokens εάν ο πληρωτής χρεώσεων σας έχει δικαιώματα έκδοσης
  • Χειραγώγηση Λογαριασμού: Χρήστες που παγώνουν, κλείνουν ή τροποποιούν λογαριασμούς που ελέγχονται από τον πληρωτή χρεώσεων σας

Βέλτιστη Πρακτική: Ξεκινήστε με όλα τα δικαιώματα απενεργοποιημένα και ενεργοποιήστε μόνο το ελάχιστο απαραίτητο σύνολο για τη συγκεκριμένη περίπτωση χρήσης σας.

Διαμόρφωση Τιμολόγησης (προαιρετική)

Η ενότητα [validation.price] ορίζει τον τρόπο υπολογισμού των χρεώσεων συναλλαγών. Διατίθενται τρία μοντέλα τιμολόγησης:

  • Τιμολόγηση Περιθωρίου (προεπιλογή) - Προσθήκη ποσοστιαίου περιθωρίου πάνω από τις πραγματικές χρεώσεις δικτύου (το προεπιλεγμένο περιθώριο είναι 0.0)
  • Σταθερή Τιμολόγηση - Χρέωση σταθερού ποσού σε συγκεκριμένο token ανεξάρτητα από τις χρεώσεις δικτύου
  • Δωρεάν Τιμολόγηση - Χορηγία όλων των χρεώσεων συναλλαγών (χωρίς χρέωση στους χρήστες)
ΕπιλογήΠεριγραφήΑπαιτείταιΤύπος
typeΜοντέλο τιμολόγησης προς χρήση"margin", "fixed" ή "free"
marginΠοσοστό περιθωρίου για προσθήκη στις χρεώσεις δικτύου(όταν το type είναι "margin")number
amountΣταθερό ποσό προς χρέωση σε βασικές μονάδες token(όταν το type είναι "fixed")number
tokenMint token για χρέωση(όταν το type είναι "fixed")συμβολοσειρά κωδικοποιημένη σε b58

Τιμολόγηση Περιθωρίου

Προσθέστε ένα ποσοστό περιθωρίου πάνω από τις πραγματικές χρεώσεις δικτύου:

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

Σταθερή Τιμολόγηση

ΠΡΟΕΙΔΟΠΟΙΗΣΗ ΑΣΦΑΛΕΙΑΣ: Η σταθερή τιμολόγηση ΔΕΝ περιλαμβάνει την εκροή του πληρωτή χρεώσεων στο χρεωμένο ποσό. Αυτό μπορεί να επιτρέψει στους χρήστες να αδειάσουν τον λογαριασμό του πληρωτή χρεώσεών σας εάν δεν έχει διαμορφωθεί σωστά.

Χρεώστε ένα σταθερό ποσό σε συγκεκριμένο token ανεξάρτητα από τις χρεώσεις δικτύου:

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

Δωρεάν Συναλλαγές

Χορηγήστε όλες τις χρεώσεις συναλλαγών (χωρίς χρέωση στους χρήστες):

[validation.price]
type = "free"

Μέτρα Ασφαλείας κατά τη Χρήση Σταθερής/Δωρεάν Τιμολόγησης

  1. Απενεργοποιήστε Όλες τις Μεταφορές και Χρηματικές Λειτουργίες - Αποτρέψτε τη χρήση του πληρωτή χρεώσεων ως πηγή σε μεταφορές:

    [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. Ενεργοποιήστε τον Έλεγχο Ταυτότητας - Χρησιμοποιήστε έλεγχο ταυτότητας για να αποτρέψετε την κατάχρηση:

    [kora.auth]
    api_key = "your-secure-api-key"
    # or
    hmac_secret = "your-minimum-32-character-hmac-secret"
  3. Ορίστε Συντηρητικά Όρια - Ελαχιστοποιήστε την έκθεση:

    [validation]
    max_allowed_lamports = 1000000 # 0.001 SOL maximum

ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Ιδιαίτερα επικίνδυνες λειτουργίες κατά τη χρήση σταθερής/δωρεάν τιμολόγησης:

  • allow_mint_to: Θα μπορούσε να επιτρέψει απεριόριστη δημιουργία token εάν ο πληρωτής χρεώσεων έχει εξουσία έκδοσης
  • allow_set_authority: Θα μπορούσε να μεταφέρει τον έλεγχο κρίσιμων λογαριασμών σε επιτιθέμενους
  • allow_transfer: Επιτρέπει άμεσο άδειασμα των υπολοίπων token του πληρωτή χρεώσεων
  • allow_close_account: Επιστρέφει το ενοίκιο σε λογαριασμούς που ελέγχονται από επιτιθέμενους

Παρακολούθηση Απόδοσης (προαιρετικό)

Η ενότητα [metrics] διαμορφώνει τη συλλογή μετρήσεων και την παρακολούθηση. Αυτή η ενότητα είναι προαιρετική και από προεπιλογή, οι μετρήσεις είναι απενεργοποιημένες.

[metrics]
enabled = true
endpoint = "/metrics"
port = 8080
scrape_interval = 60
[metrics.fee_payer_balance]
enabled = true
expiry_seconds = 30
ΕπιλογήΠεριγραφήΑπαιτείταιΤύπος
enabledΕνεργοποίηση συλλογής μετρήσεωνboolean
endpointΠροσαρμοσμένη διαδρομή τελικού σημείου μετρήσεωνstring
portΘύρα τελικού σημείου μετρήσεωνnumber
scrape_intervalΣυχνότητα ανάκτησης Prometheus (δευτερόλεπτα)number

Παρακολούθηση Υπολοίπου Πληρωτή Τελών

Η ενότητα [metrics.fee_payer_balance] ρυθμίζει την αυτόματη παρακολούθηση του υπολοίπου SOL του πληρωτή τελών σας:

ΕπιλογήΠεριγραφήΑπαιτείταιΤύπος
enabledΕνεργοποίηση παρακολούθησης υπολοίπου πληρωτή τελών❌ (προεπιλογή: false)boolean
expiry_secondsΔιάστημα παρακολούθησης παρασκηνίου σε δευτερόλεπτα❌ (προεπιλογή: 30)number

Όταν είναι ενεργοποιημένο, το Kora παρακολουθεί αυτόματα το υπόλοιπο SOL του πληρωτή τελών σας και το εκθέτει μέσω του μετρητή Prometheus fee_payer_balance_lamports. Αυτό βοηθά στον σχεδιασμό χωρητικότητας και στην ειδοποίηση χαμηλού υπολοίπου.

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

→ Οδηγός Αναφοράς Παρακολούθησης Kora

Πλήρες Παράδειγμα

Ακολουθεί μια έτοιμη για παραγωγή ρύθμιση με βέλτιστες πρακτικές ασφαλείας:

# 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

Επικύρωση Ρυθμίσεων

Το Kora επικυρώνει τη ρύθμισή σας κατά την εκκίνηση. Εάν θέλετε να επικυρώσετε τη ρύθμισή σας χωρίς να εκκινήσετε τον διακομιστή, μπορείτε να χρησιμοποιήσετε την εντολή επικύρωσης ρυθμίσεων:

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

Μπορείτε επίσης να εκτελέσετε την εντολή validate-with-rpc για να επικυρώσετε τη ρύθμισή σας με τον διακομιστή RPC (αυτός ο έλεγχος επικύρωσης είναι λίγο πιο αργός αλλά κάνει πιο διεξοδικούς ελέγχους λογαριασμών)

Εκκίνηση του Διακομιστή

Αφού ρυθμίσετε το αρχείο kora.toml, μπορείτε να εκκινήσετε τον διακομιστή Kora:

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

Η σημαία --no-load-signer θα αρχικοποιήσει τον διακομιστή χωρίς να φορτώσει κανέναν υπογράφοντα. Αυτό είναι χρήσιμο για τη δοκιμή της ρύθμισής σας. Για να φορτώσετε υπογράφοντες, θα χρειαστεί να ρυθμίσετε το αρχείο signers.toml. Μια ελάχιστη ρύθμιση με έναν μόνο υπογράφοντα θα έμοιαζε με αυτή:

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

Αυτό θα φορτώσει έναν μόνο υπογράφοντα από τη μεταβλητή περιβάλλοντος MY_SIGNER_PRIVATE_KEY. Στη συνέχεια μπορείτε να εκκινήσετε τον διακομιστή σας με:

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

Για περισσότερες πληροφορίες και προηγμένη διαμόρφωση υπογραφέα, δείτε τον Οδηγό Υπογραφέων.

Βέλτιστες Πρακτικές

  1. Ξεκινήστε Περιοριστικά: Ξεκινήστε με αυστηρά όρια και επεκτείνετέ τα σταδιακά
  2. Παρακολουθήστε τη Χρήση: Εντοπίστε ποια προγράμματα και tokens χρησιμοποιούνται πραγματικά
  3. Τακτικές Ενημερώσεις: Επανεξετάστε και ενημερώστε τις μαύρες λίστες και τα όρια
  4. Δοκιμάστε τις Αλλαγές: Επικυρώστε πρώτα τις αλλαγές διαμόρφωσης σε περιβάλλον δοκιμών
  5. Εκδόσεις: Διατηρήστε ένα αρχείο καταγραφής αλλαγών της διαμόρφωσής σας

Χρειάζεστε Βοήθεια;

Is this page helpful?

Πίνακας Περιεχομένων

Επεξεργασία Σελίδας

Διαχειρίζεται από

© 2026 Ίδρυμα Solana.
Με επιφύλαξη παντός δικαιώματος.
Συνδεθείτε