Υπογράφοντες

Τελευταία Ενημέρωση: 2025-08-22

Τι είναι ένας Υπογράφων;

Ένας υπογράφων είναι το κρυπτογραφικό ζεύγος κλειδιών που χρησιμοποιεί ο κόμβος Kora σας για να υπογράφει τις συναλλαγές Solana ως ο πληρωτής των τελών. Όταν οι χρήστες στέλνουν συναλλαγές στον κόμβο Kora σας, τις επικυρώνει και τις συνυπογράφει με το ιδιωτικό κλειδί του υπογράφοντός σας για να καλύψει τα τέλη συναλλαγής SOL.

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

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

  • Αποστραγγίσει το υπόλοιπό σας σε SOL
  • Υπογράψει μη εξουσιοδοτημένες συναλλαγές
  • Διαταράξει την υπηρεσία paymaster σας

Διαμόρφωση Υπογράφοντα

Το Kora RPC CLI απαιτεί να καθοριστεί ένα signer.toml μέσω της σημαίας --signers-config. Το αρχείο singer.toml σας επιτρέπει να διαμορφώσετε τον/τους υπογράφοντα/ες και τη διαμόρφωση υπογράφοντα για τον κόμβο σας. Το signer.toml έχει δύο τμήματα:

  1. [signer_pool] - Διαμόρφωση για τη δεξαμενή υπογραφόντων
  2. [[signers]] - Διαμόρφωση για κάθε υπογράφοντα (απαιτείται τουλάχιστον ένας υπογράφων εκτός εάν χρησιμοποιείτε τη σημαία --no-load-signer που έχει περιορισμένη λειτουργικότητα)

[signer_pool]

Η διαμόρφωση της δεξαμενής υπογραφόντων καθορίζει χαρακτηριστικά ειδικά για τη δεξαμενή υπογραφόντων στο σύνολό της:

  • strategy - Η στρατηγική επιλογής για την επιλογή υπογραφόντων. Οι διαθέσιμες στρατηγικές είναι:
    • round_robin (προεπιλογή) - Εναλλαγή μεταξύ των υπογραφόντων με σειρά.
    • random - Επιλογή υπογραφόντων τυχαία.
    • weighted - Επιλογή υπογραφόντων με βάση το βάρος.

[[signers]]

Κάθε υπογράφων διαμορφώνεται με:

  • ένα name: ένα αναγνώσιμο αναγνωριστικό για τον υπογράφοντα και πρέπει να είναι μοναδικό εντός της ομάδας υπογραφόντων
  • ένα προαιρετικό weight: ένας αριθμός που καθορίζει το βάρος του υπογράφοντα εάν το strategy είναι weighted
  • ένα type και διαμόρφωση ανάλογα με τον τύπο (δείτε Τύποι Υπογραφόντων)

Απαιτείται ένας υπογράφων εκτός εάν χρησιμοποιείται η σημαία --no-load-signer η οποία έχει περιορισμένη λειτουργικότητα. Για αναπτύξεις παραγωγής, συνιστάται να διαμορφώσετε πολλούς υπογράφοντες για βελτιωμένη αξιοπιστία και απόδοση.

Παράδειγμα

Ακολουθεί ένα παράδειγμα αρχείου signers.toml που ορίζει μια ομάδα υπογραφόντων round-robin με τρεις υπογράφοντες (σημείωση: θα καλύψουμε τους διαφορετικούς τύπους/διαμορφώσεις υπογραφόντων στην επόμενη ενότητα):

[signer_pool]
# Selection strategy: round_robin, random, weighted
strategy = "round_robin"
# Primary memory signer
[[signers]]
name = "signer_1"
type = "memory"
private_key_env = "SIGNER_1_PRIVATE_KEY"
# weight = 1 # Not required if strategy is not weighted
# Backup memory signer
[[signers]]
name = "signer_2"
type = "memory"
private_key_env = "SIGNER_2_PRIVATE_KEY"
# weight = 1 # Not required if strategy is not weighted
# Turnkey signer for high-value operations
[[signers]]
name = "signer_3_turnkey"
type = "turnkey"
api_public_key_env = "TURNKEY_API_PUBLIC_KEY"
api_private_key_env = "TURNKEY_API_PRIVATE_KEY"
organization_id_env = "TURNKEY_ORG_ID"
private_key_id_env = "TURNKEY_PRIVATE_KEY_ID"
public_key_env = "TURNKEY_PUBLIC_KEY"
# weight = 2 # Higher weight = selected more often

Μεταβλητές Περιβάλλοντος

Ορίστε μεταβλητές περιβάλλοντος για όλους τους διαμορφωμένους υπογράφοντες:

# Memory signers
SIGNER_1_PRIVATE_KEY="your_base58_private_key_1"
SIGNER_2_PRIVATE_KEY="your_base58_private_key_2"
# Turnkey signer
TURNKEY_API_PUBLIC_KEY="your_turnkey_api_public_key"
TURNKEY_API_PRIVATE_KEY="your_turnkey_api_private_key"
TURNKEY_ORG_ID="your_turnkey_organization_id"
TURNKEY_PRIVATE_KEY_ID="your_turnkey_private_key_id"
TURNKEY_PUBLIC_KEY="your_turnkey_public_key"

Εκκινήστε το Kora με Διαμόρφωση Υπογραφόντων

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

Τύποι Υπογραφόντων

Το Kora υποστηρίζει τέσσερις κύριους τύπους υπογραφόντων, ο καθένας με διαφορετικά χαρακτηριστικά ασφάλειας και λειτουργίας (και μια επιλογή χωρίς υπογράφοντα για περιορισμένες δοκιμές):

  • Ιδιωτικό Κλειδί - απλό, αυτο-διαχειριζόμενο
  • Turnkey - υπηρεσία διαχείρισης κλειδιών
  • Privy - υπηρεσία διαχείρισης κλειδιών
  • Vault - ενσωμάτωση HashiCorp Vault
  • Χωρίς Υπογράφοντα - χωρίς υπογράφοντα (για περιορισμένες δοκιμές)

Υπογράφων Ιδιωτικού Κλειδιού

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

1. Μορφή Base58 (Προεπιλογή)

Τυπικό κωδικοποιημένο ιδιωτικό κλειδί Solana σε Base58:

KORA_PRIVATE_KEY="5KKsLVU6TcbVDK4BS6K1DGDxnh4Q9xjYJ8XaDCG5t8ht..."

2. Μορφή U8Array

Πίνακας 64 bytes σε μορφή JSON:

KORA_PRIVATE_KEY="[174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138, 189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240, 148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135]"

3. Διαδρομή Αρχείου JSON

Διαδρομή προς αρχείο JSON που περιέχει το ζεύγος κλειδιών:

KORA_PRIVATE_KEY="/path/to/keypair.json"

Όπου το keypair.json περιέχει:

[
174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56,
222, 53, 138, 189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15,
185, 186, 82, 177, 240, 148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121,
35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135
]

Δημιουργία Νέου Ζεύγους Κλειδιών

Μπορείτε να δημιουργήσετε ένα νέο ζεύγος κλειδιών για τον κόμβο Kora σας χρησιμοποιώντας το Solana CLI:

# Generate new keypair file
solana-keygen new --outfile ~/.config/solana/kora-keypair.json
# Get the public key
solana-keygen pubkey ~/.config/solana/kora-keypair.json
# Fund with SOL for transaction fees
solana transfer --from <your-funding-wallet> <kora-public-key> 0.1

Διαμόρφωση Signer.toml

Απαιτούμενες μεταβλητές:

  • name - Το όνομα του υπογράφοντα
  • type - Ο τύπος του υπογράφοντα (πρέπει να είναι memory)
  • private_key_env - Η μεταβλητή περιβάλλοντος που περιέχει το ιδιωτικό κλειδί
[[signers]]
name = "my_memory_signer"
type = "memory"
private_key_env = "KORA_PRIVATE_KEY" # (or your environment variable name)

Υπογράφων Turnkey

Το Turnkey παρέχει διαχείριση κλειδιών επιχειρηματικού επιπέδου με μονάδες ασφαλείας υλικού (HSMs) και ελέγχους πολιτικής.

Προαπαιτούμενα

Θα χρειαστείτε έναν Λογαριασμό Turnkey για να χρησιμοποιήσετε τον υπογράφοντα Turnkey. Εγγραφείτε στο turnkey.com

Ρύθμιση

Θα χρειαστείτε πέντε κλειδιά για να χρησιμοποιήσετε τον υπογράφοντα Turnkey:

  • Turnkey organization ID
  • Turnkey API public key
  • Turnkey API private key
  • Turnkey private key ID
  • Turnkey public key

Ας τα ανακτήσουμε από το Turnkey:

1. Οργανισμός Turnkey

Κάντε κλικ στο μενού χρήστη στην πάνω δεξιά γωνία του πίνακα ελέγχου Turnkey και αντιγράψτε το αναγνωριστικό οργανισμού:

Turnkey Organization IDTurnkey Organization ID

Αποθηκεύστε το αναγνωριστικό οργανισμού σε μια μεταβλητή περιβάλλοντος:

TURNKEY_ORGANIZATION_ID="your_organization_id"

2. Κλειδιά API Turnkey

  • Κάντε κλικ στο μενού χρήστη στην πάνω δεξιά γωνία του πίνακα ελέγχου Turnkey και κάντε κλικ στο "Account Settings".
  • Στην ενότητα "API Keys", κάντε κλικ στο "+ Create API Key".
  • Επιλέξτε "Generate API keys in-browser"
  • Εισαγάγετε ένα όνομα για το κλειδί API και κάντε κλικ στο "Continue"
  • Αποθηκεύστε τα δημόσια και ιδιωτικά κλειδιά και κάντε κλικ στο "Approve"

Turnkey API KeysTurnkey API Keys

Αποθηκεύστε τα δημόσια και ιδιωτικά κλειδιά API σε μεταβλητές περιβάλλοντος:

TURNKEY_API_PUBLIC_KEY="your_turnkey_api_public_key"
TURNKEY_API_PRIVATE_KEY="your_turnkey_api_private_key"

3. Κλειδιά Πορτοφολιού Turnkey

Από το κύριο μενού, μεταβείτε στα "Πορτοφόλια" και κάντε κλικ στο "Δημιουργία Ιδιωτικού Κλειδιού".

Θα δημιουργήσουμε ένα νέο ιδιωτικό κλειδί ED25519 με τύπο διεύθυνσης περιουσιακού στοιχείου "Solana":

Πορτοφόλια TurnkeyΠορτοφόλια Turnkey

Κάντε κλικ στο "Συνέχεια" και στη συνέχεια στο "Έγκριση".

Από τη σελίδα των πορτοφολιών σας, θα πρέπει να δείτε το νέο σας ιδιωτικό κλειδί. Κάντε κλικ σε αυτό για να δείτε τις λεπτομέρειες. Θα χρειαστεί να αντιγράψετε το "Αναγνωριστικό ιδιωτικού κλειδιού" και τη "Διεύθυνση" του πορτοφολιού. Αποθηκεύστε τα σε μεταβλητές περιβάλλοντος:

TURNKEY_PRIVATE_KEY_ID="your_private_key_id" #7936...
TURNKEY_PUBLIC_KEY="your_solana_address" # 4gBe...

Λεπτομέρειες Πορτοφολιού TurnkeyΛεπτομέρειες Πορτοφολιού Turnkey

Θα πρέπει να χρηματοδοτήσετε το πορτοφόλι με SOL για να πληρώσετε τα τέλη συναλλαγών.

Διαμόρφωση Μεταβλητών Περιβάλλοντος

Θα πρέπει τώρα να έχετε τις ακόλουθες μεταβλητές περιβάλλοντος:

# .env file
TURNKEY_ORGANIZATION_ID="your_organization_id"
TURNKEY_API_PUBLIC_KEY="your_turnkey_api_public_key"
TURNKEY_API_PRIVATE_KEY="your_turnkey_api_private_key"
TURNKEY_PRIVATE_KEY_ID="your_private_key_id"
TURNKEY_PUBLIC_KEY="your_solana_public_key"

Δείτε το αποθετήριο Kora για ένα πλήρες αρχείο .env.example.

Για υποστήριξη με το Turnkey, δείτε την τεκμηρίωση Turnkey.

Διαμόρφωση Signer.toml

Απαιτούμενες μεταβλητές:

  • name - Το όνομα του υπογράφοντος
  • type - Ο τύπος του υπογράφοντος (πρέπει να είναι turnkey)
  • api_public_key_env - Η μεταβλητή περιβάλλοντος που περιέχει το δημόσιο κλειδί API του Turnkey
  • api_private_key_env - Η μεταβλητή περιβάλλοντος που περιέχει το ιδιωτικό κλειδί API του Turnkey
  • organization_id_env - Η μεταβλητή περιβάλλοντος που περιέχει το αναγνωριστικό οργανισμού Turnkey
  • private_key_id_env - Η μεταβλητή περιβάλλοντος που περιέχει το αναγνωριστικό ιδιωτικού κλειδιού Turnkey
  • public_key_env - Η μεταβλητή περιβάλλοντος που περιέχει το δημόσιο κλειδί Turnkey
[[signers]]
name = "my_turnkey_signer"
type = "turnkey"
api_public_key_env = "TURNKEY_API_PUBLIC_KEY"
api_private_key_env = "TURNKEY_API_PRIVATE_KEY"
organization_id_env = "TURNKEY_ORG_ID"
private_key_id_env = "TURNKEY_PRIVATE_KEY_ID"
public_key_env = "TURNKEY_PUBLIC_KEY"

Υπογράφων Privy

Το Privy προσφέρει ενσωματωμένη υποδομή πορτοφολιού με ασφαλή διαχείριση κλειδιών για εφαρμογές Web3.

Προαπαιτούμενα

Θα χρειαστείτε έναν Λογαριασμό Privy για να χρησιμοποιήσετε τον υπογράφοντα Privy. Εγγραφείτε στο privy.io

Εγκατάσταση

Θα χρειαστείτε τρία κλειδιά για να χρησιμοποιήσετε τον υπογράφοντα Privy:

  • Privy App ID
  • Privy App Secret
  • Privy Wallet ID

Ας τα ανακτήσουμε από το Privy:

1. Privy App ID

Από τον πίνακα ελέγχου σας, επιλέξτε την εφαρμογή που θέλετε να χρησιμοποιήσετε για το Kora (ή κάντε κλικ στο "+ New app" αν δεν έχετε κάποια).

Επιλέξτε "Retrieve API Keys" και κάντε κλικ στο "+ New Secret":

Privy WalletsPrivy Wallets

Αντιγράψτε το "App ID" και το "App Secret" σας και αποθηκεύστε τα σε μεταβλητές περιβάλλοντος:

PRIVY_APP_ID="your_privy_app_id"
PRIVY_APP_SECRET="your_privy_app_secret"

2. Privy Wallet

Στη συνέχεια, θα χρειαστεί να δημιουργήσουμε ένα νέο πορτοφόλι για το Kora. Από την πλαϊνή μπάρα του πίνακα ελέγχου σας κάντε κλικ στο "Wallets" κάτω από το "Wallet Infrastructure", και επιλέξτε "New Wallet".

Επιλέξτε "Solana" ως blockchain και κάντε κλικ στο "Save".

Κάντε κλικ στο πορτοφόλι για να δείτε τις λεπτομέρειες:

Privy WalletsPrivy Wallets

Αντιγράψτε το "Wallet ID" και αποθηκεύστε το σε μεταβλητές περιβάλλοντος:

PRIVY_WALLET_ID="your_privy_wallet_id"

Θα χρειαστεί να χρηματοδοτήσετε το πορτοφόλι με SOL για να πληρώσετε τις χρεώσεις συναλλαγών.

Διαμόρφωση Μεταβλητών Περιβάλλοντος

Θα πρέπει τώρα να έχετε τις ακόλουθες μεταβλητές περιβάλλοντος:

# .env file
PRIVY_APP_ID="your_privy_app_id"
PRIVY_APP_SECRET="your_privy_app_secret"
PRIVY_WALLET_ID="your_wallet_id"

Δείτε το αποθετήριο Kora για ένα πλήρες αρχείο .env.example.

Για υποστήριξη σχετικά με το Privy, δείτε την τεκμηρίωση Privy.

Διαμόρφωση Signer.toml

Απαιτούμενες μεταβλητές:

  • name - Το όνομα του υπογράφοντα
  • type - Ο τύπος του υπογράφοντα (πρέπει να είναι privy)
  • app_id_env - Η μεταβλητή περιβάλλοντος που περιέχει το Privy app ID
  • app_secret_env - Η μεταβλητή περιβάλλοντος που περιέχει το Privy app secret
  • wallet_id_env - Η μεταβλητή περιβάλλοντος που περιέχει το Privy wallet ID
[[signers]]
name = "my_privy_signer"
type = "privy"
app_id_env = "PRIVY_APP_ID"
app_secret_env = "PRIVY_APP_SECRET"
wallet_id_env = "PRIVY_WALLET_ID"

Χωρίς Υπογράφοντα

Εάν δεν έχει διαμορφωθεί υπογράφων, το Kora θα επιστρέψει σφάλμα. Εάν θέλετε να εκτελέσετε το Kora χωρίς υπογράφοντα, μπορείτε να το εκτελέσετε με τη σημαία --no-signer:

kora --config path/to/kora.toml rpc start --no-signer

Σημειώστε ότι αυτό θα περιορίσει τον κόμβο σας στην επεξεργασία μόνο αιτημάτων που δεν απαιτούν υπογράφοντα.

Αντιμετώπιση Προβλημάτων

Γρήγορη Αναφορά

Μήνυμα ΣφάλματοςΤύπος ΥπογράφονταΓρήγορη Λύση
"At least one signer must be configured"ΟποιοσδήποτεΠροσθέστε τουλάχιστον έναν υπογράφοντα στη διαμόρφωση
"Failed to read config file"ΟποιοσδήποτεΕλέγξτε τη διαδρομή και τα περιεχόμενα του αρχείου
"Failed to parse signers config TOML"ΟποιοσδήποτεΕλέγξτε τη μορφή του αρχείου και τα περιεχόμενα υπογραφόντων
"Duplicate signer name"ΟποιοσδήποτεΒεβαιωθείτε ότι κάθε υπογράφων έχει μοναδικό όνομα στη διαμόρφωση
"Invalid base58 string"Ιδιωτικό ΚλειδίΕλέγξτε τη μορφή του κλειδιού, χωρίς επιπλέον κενά
"Invalid private key length"Ιδιωτικό ΚλειδίΧρησιμοποιήστε πλήρες κλειδί Solana 64-byte
"Turnkey {key} required"TurnkeyΟρίστε TURNKEY_{key}
"Privy {key} required"PrivyΟρίστε PRIVY_{key}
"Vault {key} required"VaultΟρίστε VAULT_{key}
"Failed to create Vault client"VaultΕπαληθεύστε τα διαπιστευτήρια του Vault
"Failed to sign with [service]"ΟποιοσδήποτεΕλέγξτε την κατάσταση της υπηρεσίας & διαπιστευτήρια & όρια ρυθμού
"Signer pool not initialized"Πολλαπλοί ΥπογράφοντεςΕλέγξτε τη διαδρομή και μορφή του signers.toml
"Cannot create empty signer pool"Πολλαπλοί ΥπογράφοντεςΠροσθέστε τουλάχιστον έναν υπογράφοντα στη διαμόρφωση
"Signer with pubkey ... not found"Πολλαπλοί ΥπογράφοντεςΕλέγξτε αν η υπόδειξη υπογράφοντα ταιριάζει με τους διαμορφωμένους υπογράφοντες
"Signers configuration is required unless using --no-load-signer"ΟποιοσδήποτεΠροσθέστε ένα αρχείο διαμόρφωσης υπογραφόντων

Γενικές Συμβουλές Αποσφαλμάτωσης

Ενεργοποίηση Λεπτομερούς Καταγραφής

Προσθέστε λεπτομερή καταγραφή για τη διάγνωση προβλημάτων:

RUST_LOG=debug kora rpc --with-turnkey-signer

Ασφάλεια & Βέλτιστες Πρακτικές

Γενική Ασφάλεια

  • Χρησιμοποιήστε αποκλειστικά keypairs για το Kora (μην επαναχρησιμοποιείτε προσωπικά πορτοφόλια)
  • Χρηματοδοτήστε μόνο με SOL που είστε διατεθειμένοι να ξοδέψετε σε χρεώσεις
  • Διατηρήστε ελάχιστο λειτουργικό υπόλοιπο με αυτοματοποιημένη παρακολούθηση και επαναφόρτιση
  • Εφαρμόστε παρακολούθηση και ειδοποιήσεις για ασυνήθιστη δραστηριότητα
  • Όλα τα ιδιωτικά κλειδιά και τα API keys θα πρέπει να αποθηκεύονται σε μεταβλητές περιβάλλοντος ή σε συστήματα διαχείρισης μυστικών (Railway secrets, AWS Secrets Manager, κ.λπ.)

Καθορισμός Υπογράφοντα (Πλευρά Πελάτη)

Οι πελάτες μπορούν να καθορίσουν έναν προτιμώμενο υπογράφοντα για συνέπεια σε σχετικές λειτουργίες:

// Fetch the signers by calling getPayerSigner
const { signer, payment_destination } = await client.getPayerSigner();
console.log(signer, payment_destination);
// Estimate with specific signer
const estimate = await client.estimateTransactionFee({
transaction: tx,
signer_key: signer // Public key of preferred signer (one of the signers in the signer pool)
});
// Sign with same signer
const signed = await client.signTransaction({
transaction: tx,
signer_key: signer // Same signer for consistency
});

Χωρίς κλειδιά υπογράφοντα, η διαμορφωμένη στρατηγική καθορίζει την επιλογή υπογράφοντα. Είναι σημαντικό να σημειωθεί ότι τα κλειδιά πρέπει να είναι συνεπή σε όλες τις κλήσεις που σχετίζονται με την ίδια συναλλαγή (π.χ., αν δημιουργήσετε μια συναλλαγή με ένα καθορισμένο κλειδί υπογράφοντα, πρέπει να χρησιμοποιήσετε το ίδιο κλειδί υπογράφοντα για όλες τις σχετικές κλήσεις).

Is this page helpful?

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

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

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

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