Το Keychain αφαιρεί την πολυπλοκότητα του signing backend, ωστόσο η λειτουργία ενός signer σε παραγωγή παραμένει δική σας ευθύνη. Αυτές οι πρακτικές εφαρμόζονται σε όλα τα backends· ανατρέξτε στο Επιλογή backend για την επιλογή του κατάλληλου.
Διαχωρίστε τους hot και cold signers
Χρησιμοποιήστε έναν λειτουργικό signer χαμηλού υπολοίπου ("hot") για συχνές, αυτοματοποιημένες συναλλαγές, και έναν ξεχωριστό signer υψηλής αξίας ("cold") για κινήσεις ταμείου. Υποστηρίξτε τον cold signer με MPC custody ή cloud HSM και απαιτήστε πολιτικές έγκρισης πριν υπογράψει. Επειδή η διεπαφή είναι πανομοιότυπη, κάθε ρόλος μπορεί να χρησιμοποιεί διαφορετικό backend χωρίς αλλαγές στα σημεία κλήσης.
Εναλλάσσετε κλειδιά με πρόθεση
Στο Solana το κλειδί υπογραφής είναι η διεύθυνση του λογαριασμού, επομένως η εναλλαγή κλειδιού παράγει νέα διεύθυνση. Σχεδιάστε την εναλλαγή ως μετεγκατάσταση: δημιουργήστε ένα νέο κλειδί, αναθέστε εκ νέου τις σχετικές εξουσίες (ή μεταφέρετε κεφάλαια) στη νέα διεύθυνση, και στη συνέχεια αποσύρετε το παλιό. Χρησιμοποιήστε διακριτά κλειδιά ανά περιβάλλον, ώστε τα κλειδιά devnet να μην επαναχρησιμοποιούνται ποτέ στο mainnet.
Παραχωρήστε πρόσβαση ελάχιστων δικαιωμάτων
Περιορίστε τα διαπιστευτήρια κάθε backend στα ελάχιστα απαραίτητα για υπογραφή. Για το AWS KMS,
αυτά είναι kms:Sign, kms:DescribeKey και kms:GetPublicKey στο συγκεκριμένο κλειδί
(ο έλεγχος διαθεσιμότητας χρησιμοποιεί τα δύο τελευταία)· προτιμήστε IAM roles έναντι στατικών
διαπιστευτηρίων. Εφαρμόστε την ίδια αρχή στις πολιτικές Vault και στα API keys
διαχειριζόμενων wallets.
Σχεδιάστε για διαθεσιμότητα
Τα απομακρυσμένα backends εξαρτώνται από μια υπηρεσία δικτύου. Ελέγξτε τη διαθεσιμότητα πριν βασιστείτε
σε έναν signer (isAvailable() στην TypeScript, is_available() στις Rust και Python,
IsAvailable(ctx) στη Go), επαναλάβετε με backoff τις αποτυχίες που αφορούν μόνο υπογραφή, και ορίστε μια
εναλλακτική διαδρομή για διακοπές. Μην επαναλαμβάνετε τυφλά ένα backend που κάνει broadcast
(Crossmint, Fordefi native auto mode): δείτε
Διαχείριση ανεπιβεβαίωτων broadcasts. Το Keychain
επιβάλλει HTTPS στα ρυθμισμένα base URLs, απορρίπτει τις ανακατευθύνσεις και εφαρμόζει προεπιλεγμένο
timeout αιτήματος.
Διαχείριση ανεπιβεβαίωτων broadcasts
Το Crossmint και το Fordefi native auto mode υπογράφουν και κάνουν broadcast από την πλευρά του διακομιστή, οπότε μια
αποτυχημένη κλήση δεν σημαίνει ότι δεν έφτασε τίποτα. Όταν ο πάροχος ενδέχεται να έχει αποδεχτεί
τη συναλλαγή, το Keychain επιστρέφει BROADCAST_UNCONFIRMED
(SignerError::BroadcastUnconfirmed στη Rust). Το σφάλμα περιέχει το transaction id του παρόχου
όταν η δημιουργία έγινε αποδεκτή, και περιέχει πάντα το idempotency
key με το οποίο στάλθηκε η δημιουργία, το οποίο προκύπτει από το μήνυμα.
- Συμφιλιώστε την κατάσταση με τον πάροχο χρησιμοποιώντας το transaction id πριν κάνετε οτιδήποτε άλλο.
- Η επαναποστολή της πανομοιότυπης (byte-identical) συναλλαγής είναι ασφαλής: το idempotency key αποτρέπει την αντιγραφή της.
- Η αναδόμηση της συναλλαγής (για παράδειγμα, με νέο blockhash) παράγει νέο key και συνεπώς νέα μεταφορά.
Προστατέψτε μυστικά και μεταφορά
- Τα απομακρυσμένα backends επιβάλλουν HTTPS στα ρυθμισμένα base URLs και απορρίπτουν τις ανακατευθύνσεις.
Η μοναδική εξαίρεση είναι το Vault, που δέχεται απλό HTTP στο loopback, ώστε να λειτουργεί ένα τοπικό
vault server -dev. - Παρέχετε API keys, tokens και διαπιστευτήρια από έναν secret manager ή μεταβλητές περιβάλλοντος — μην τα κωδικοποιείτε ποτέ σε στατικό κώδικα ούτε να τα υποβάλλετε σε source control.
- Το Keychain εξυγιαίνει τις αποκρίσεις σφαλμάτων για να αποφύγει τη διαρροή μυστικών στα logs· διατηρείτε τα δικά σας logs απαλλαγμένα από ακατέργαστα διαπιστευτήρια και υλικό κλειδιών.
Παρακολουθήστε και ελέγξτε τις υπογραφές
Παρακολουθήστε τον ρυθμό επιτυχίας υπογραφής, την καθυστέρηση και τον αριθμό αποτυχιών, και δημιουργήστε ειδοποιήσεις για αιχμές — δείτε τις μετρικές στο Production Readiness. Ενεργοποιήστε τα logs ελέγχου από την πλευρά του παρόχου (KMS, Vault ή custodian) και συσχετίστε τα με τις συναλλαγές που υποβάλλει η εφαρμογή σας.
Τι ελέγχει το Keychain
- Το Keychain επικυρώνει το βήμα υπογραφής, όχι τη συναλλαγή σας: δεν υπάρχει προσομοίωση, έλεγχος περιεχομένου συναλλαγής ούτε policy engine. Επιβάλετέ τα στην εφαρμογή σας ή στους ελέγχους πολιτικής του παρόχου.
- Το Fordefi native manual mode ξαναγράφει τη συναλλαγή (blockhash, εντολές τελών Compute Budget) πριν την υπογράψει. Συνεχίστε από τη συναλλαγή που επιστρέφει, ποτέ από αυτήν που υποβάλατε, και εκτελέστε την πριν από οποιονδήποτε άλλο signer.
- Η Rust μηδενίζει (zeroize) τα ενδιάμεσα key buffers· η Python και η Go δεν μπορούν. Με το Memory backend σε αυτές τις γλώσσες, θεωρήστε ολόκληρη τη μνήμη της διεργασίας ευαίσθητη.
- Με το Ledger, η οθόνη της συσκευής είναι η μόνη αξιόπιστη περιγραφή του τι
υπογράφεται. Μην ενεργοποιείτε το feature
unsafe-debugή το loggingTRACEγια τοsolana_remote_walletσε περιβάλλον παραγωγής, καθώς και τα δύο καταγράφουν λεπτομέρειες συσκευής και συναλλαγής.
Δείτε το μοντέλο ασφάλειας για την πλήρη εικόνα.
Is this page helpful?