Οδηγός Εκδότη Εμπιστευτικής Μεταφοράς

Έκδοση Token Εμπιστευτικής Μεταφοράς στο Solana

Αυτός ο οδηγός απευθύνεται σε εκδότες: ομάδες που δημιουργούν και διαχειρίζονται ένα mint Token-2022 που χρησιμοποιεί την επέκταση Εμπιστευτικής Μεταφοράς. Καλύπτει τις αποφάσεις που λαμβάνετε κατά τη δημιουργία του mint και τις λειτουργίες που εκτελείτε κατά τη διάρκεια ζωής του mint. Για τη ροή από την πλευρά του κατόχου (κατάθεση, εφαρμογή, μεταφορά, ανάληψη) δείτε τις αναλυτικές σελίδες, και για την υποστήριξη αυτών των token σε ένα προϊόν δείτε τον Οδηγό Ενσωμάτωσης.

Οι εμπιστευτικές μεταφορές διατηρούν τα ποσά μεταφοράς και τα υπόλοιπα λογαριασμών κρυπτογραφημένα, ενώ αφήνουν τις διευθύνσεις λογαριασμών, το mint και τους ιδιοκτήτες δημόσια ορατούς. Βασίζονται στο ZK ElGamal Proof Program για επαλήθευση αποδείξεων onchain, επομένως το mint μπορεί να χρησιμοποιηθεί σε clusters όπου αυτό το πρόγραμμα είναι ενεργοποιημένο.

Διαθεσιμότητα

Οι εμπιστευτικές μεταφορές απαιτούν το Token-2022 program@v11.0.0 ή νεότερο. Είναι διαθέσιμες στο devnet σήμερα και έχουν προγραμματιστεί να ενεργοποιηθούν στο mainnet τον Ιούνιο του 2026. Το Token Extension Program αναπτύσσεται ξεχωριστά σε κάθε cluster, επομένως επιβεβαιώστε την ανάπτυξη στο cluster που στοχεύετε.

Αποφάσεις που λαμβάνετε κατά τη δημιουργία

Η επέκταση Εμπιστευτικής Μεταφοράς πρέπει να αρχικοποιηθεί πριν από την αρχικοποίηση του mint και δεν μπορεί να προστεθεί αργότερα. Κατά τη δημιουργία αποφασίζετε:

  • Πολιτική έγκρισης: εάν οι λογαριασμοί μπορούν να συμμετέχουν σε εμπιστευτικές μεταφορές χωρίς άδεια (auto) ή πρέπει να εγκριθούν από την αρχή εμπιστευτικής μεταφοράς του mint (manual).
  • Ελεγκτής: εάν θα ορίσετε ένα καθολικό δημόσιο κλειδί ElGamal ελεγκτή, ώστε ένα ορισμένο μέρος να μπορεί να αποκρυπτογραφεί κάθε ποσό μεταφοράς για το mint. Προαιρετικό και μπορεί να αλλαχθεί αργότερα.
  • Προαιρετικές συνοδευτικές επεκτάσεις: χρεώσεις εμπιστευτικής μεταφοράς (σε συνδυασμό με την επέκταση χρέωσης μεταφοράς) και εμπιστευτική κοπή/καύση, που καλύπτονται παρακάτω. Αυτές επίσης πρέπει να αρχικοποιηθούν κατά τη δημιουργία.

Δημιουργία εμπιστευτικού mint

Το CLI ορίζει την πολιτική έγκρισης με --enable-confidential-transfers auto ή manual· το auto επιτρέπει σε κάθε κάτοχο να διαμορφώσει τον δικό του λογαριασμό, ενώ το manual απαιτεί έγκριση από την αρχή εμπιστευτικής μεταφοράς (η οποία εξ ορισμού είναι η αρχή mint). Τα μονοπάτια του client λαμβάνουν τις ίδιες ρυθμίσεις μέσω των παραμέτρων ConfidentialTransferMint: μια αρχή, τη σημαία αυτόματης έγκρισης και ένα προαιρετικό κλειδί ελεγκτή. Τόσο η πολιτική έγκρισης όσο και ο ελεγκτής μπορούν να αλλαχθούν αργότερα (βλ. Διαμόρφωση ελεγκτή)· μόνο η παρουσία της ίδιας της επέκτασης είναι μόνιμη από τη δημιουργία.

$ spl-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb create-token --enable-confidential-transfers auto

Διαμόρφωση ελεγκτή

Ένας καθολικός ελεγκτής είναι ένα δημόσιο κλειδί ElGamal αποθηκευμένο στο mint. Όταν οριστεί, κάθε εμπιστευτική μεταφορά κρυπτογραφεί επιπλέον το ποσό της με αυτό το κλειδί, ώστε όποιος κατέχει το αντίστοιχο μυστικό κλειδί να μπορεί να αποκρυπτογραφήσει όλα τα ποσά μεταφοράς για το mint. Έτσι οι εμπιστευτικές μεταφορές παραμένουν συμβατές με τις απαιτήσεις ελέγχου και συμμόρφωσης: το κοινό δεν βλέπει τίποτα, ο ελεγκτής βλέπει τα πάντα.

Η αρχή εμπιστευτικής μεταφοράς μπορεί να ορίσει, να εναλλάξει ή να αφαιρέσει τον ελεγκτή οποιαδήποτε στιγμή. Η ίδια λειτουργία ενημερώνει επίσης την πολιτική έγκρισης. Στο CLI το κλειδί ελεγκτή είναι κωδικοποίηση base64 ενός δημόσιου κλειδιού ElGamal· χρησιμοποιήστε --auditor-pubkey none για να το αφαιρέσετε και --approve-policy auto|manual για να αλλάξετε την πολιτική.

Η εναλλαγή επηρεάζει μόνο τις μελλοντικές μεταφορές. Τα ποσά σε συναλλαγές που έχουν ήδη καταγραφεί στο blockchain παραμένουν κρυπτογραφημένα με το κλειδί ελεγκτή που ήταν ενεργό κατά την εκτέλεσή τους, γι' αυτό διατηρήστε τα παλιά κλειδιά ελεγκτή εάν χρειάζεται να αποκρυπτογραφήσετε ιστορική δραστηριότητα.

$ spl-token update-confidential-transfer-settings <MINT_PUBKEY> --auditor-pubkey <AUDITOR_ELGAMAL_PUBKEY>

Το μυστικό κλειδί του ελεγκτή μπορεί να αποκρυπτογραφήσει κάθε ποσό μεταφοράς για το mint. Φυλάξτε το με την ίδια αυστηρότητα που θα φυλάσσατε ένα κλειδί υπογραφής και σχεδιάστε για εναλλαγή. Η ρύθμιση του ελεγκτή σε None απενεργοποιεί την ορατότητα ποσών για όλους εκτός από τους ίδιους τους κατόχους λογαριασμών.

Έγκριση λογαριασμών (χειροκίνητη πολιτική)

Με μια χειροκίνητη πολιτική έγκρισης, ένας λογαριασμός που έχει ρυθμιστεί για εμπιστευτικές μεταφορές δεν μπορεί να πραγματοποιήσει εμπιστευτικές συναλλαγές έως ότου η αρχή εμπιστευτικών μεταφορών τον εγκρίνει. Αυτό παρέχει στους εκδότες ένα φίλτρο για συμμετέχοντες που βρίσκονται σε allowlist ή έχουν υποβληθεί σε KYC. Το CLI δεν παρέχει εντολή έγκρισης, οπότε η έγκριση γίνεται μέσω ενός client.

token
.confidential_transfer_approve_account(
&token_account,
&authority,
&[&authority_keypair],
)
.await?;

Τέλη εμπιστευτικής μεταφοράς

Εάν το mint σας επιβάλλει τέλος μεταφοράς και οι μεταφορές είναι εμπιστευτικές, το τέλος πρέπει επίσης να παρακρατείται εμπιστευτικά. Η επέκταση ConfidentialTransferFeeConfig διαχειρίζεται αυτό και αρχικοποιείται κατά τη δημιουργία του mint, μαζί με τις επεκτάσεις τέλους μεταφοράς και εμπιστευτικής μεταφοράς.

Τα παρακρατημένα τέλη συσσωρεύονται κρυπτογραφημένα στους λογαριασμούς παραληπτών, συλλέγονται στο mint και στη συνέχεια αποσύρονται από την αρχή ανάληψης παρακρατημένων ποσών. Κάθε ποσό τέλους παραμένει κρυπτογραφημένο καθ' όλη τη διάρκεια. Τίποτα από αυτά δεν εκτίθεται μέσω του CLI. Το μυστικό κλειδί ElGamal της αρχής ανάληψης παρακρατημένων ποσών μπορεί να αποκρυπτογραφήσει τα παρακρατημένα ποσά τελών, τα οποία σε συνδυασμό με τις δημόσιες παραμέτρους τελών μπορούν να αποκαλύψουν πληροφορίες σχετικά με τα ποσά μεταφοράς, οπότε αντιμετωπίστε αυτό το κλειδί ως ευαίσθητο.

Αρχικοποίηση της ρύθμισης τελών

Συμπεριλάβετε αυτό μαζί με το ConfidentialTransferMint και τη ρύθμιση τέλους μεταφοράς στην ίδια δημιουργία mint.

use spl_token_client::token::ExtensionInitializationParams;
ExtensionInitializationParams::ConfidentialTransferFeeConfig {
authority: Some(authority.pubkey().into()),
withdraw_withheld_authority_elgamal_pubkey: withdraw_withheld_elgamal_pubkey,
};

Συλλογή και ανάληψη παρακρατημένων τελών

Η συλλογή μεταφέρει τα κρυπτογραφημένα παρακρατημένα τέλη από τους λογαριασμούς στο mint· η ανάληψη τα μεταφέρει έξω από το mint σε έναν επιλεγμένο λογαριασμό. Εμπλέκονται δύο αρχές, καθεμία από τις οποίες μπορεί να διαφέρει από την αρχή του mint:

  • Η αρχή τελών εμπιστευτικής μεταφοράς (το authority που ορίζεται στο ConfidentialTransferFeeConfig) ενεργοποιεί ή απενεργοποιεί τη συλλογή.
  • Η αρχή ανάληψης παρακρατημένων ποσών (από το TransferFeeConfig της επέκτασης τέλους μεταφοράς) αποσύρει τα συλλεγμένα τέλη από το mint.

Οι αναλήψεις απαιτούν απόδειξη ισότητας και εύρους, που παρέχεται ενσωματωμένη ή επαληθεύεται σε λογαριασμούς κατάστασης περιβάλλοντος.

// Permissionless: move withheld fees from accounts into the mint.
token
.confidential_transfer_harvest_withheld_tokens_to_mint(&[&source_account])
.await?;
// Withdraw withheld fees from the mint (requires the withdraw withheld authority).
token
.confidential_transfer_withdraw_withheld_tokens_from_mint(
&destination_account,
&withdraw_withheld_authority,
None, // proof context state account, supplied inline if None
None, // withheld tokens info, fetched if None
&withdraw_withheld_elgamal_keypair,
&destination_elgamal_pubkey,
&new_decryptable_available_balance,
&[&withdraw_withheld_authority_keypair],
)
.await?;

Στον JS client, η ανάληψη των συλλεγμένων τελών από το mint (getWithdrawWithheldTokensFromMintForConfidentialTransferFeeInstruction) απαιτεί επιπλέον απόδειξη ισότητας και εύρους επαληθευμένη σε λογαριασμούς κατάστασης περιβάλλοντος, και ακολουθεί επομένως το ίδιο μοτίβο λογαριασμού απόδειξης με μια εμπιστευτική μεταφορά.

Εμπιστευτική έκδοση και καύση

Η επέκταση ConfidentialMintBurn επιτρέπει στην αρχή έκδοσης να εκδίδει και να καίει προσφορά απευθείας έναντι εμπιστευτικών υπολοίπων, διατηρώντας την ολική προσφορά κρυπτογραφημένη. Ένα mint με αυτή την επέκταση απενεργοποιεί τη δημόσια διαδρομή κατάθεσης και ανάληψης, καθώς τα tokens υπάρχουν αποκλειστικά υπό εμπιστευτική μορφή. Δείτε την τεκμηρίωση πρωτοκόλλου για το πλήρες μοντέλο.

Η εμπιστευτική έκδοση/καύση είναι ευκολότερη μέσω του Rust spl-token-client, ο οποίος δημιουργεί τις απαιτούμενες αποδείξεις και διαχειρίζεται αυτόματα την ακολουθία των συναλλαγών. Ο JS client @solana-program/token-2022 παρέχει τους builders εντολών χαμηλού επιπέδου (getConfidentialMintInstruction, getConfidentialBurnInstruction και συναφή), αλλά όχι βοηθό υψηλού επιπέδου για τη δημιουργία αποδείξεων, και δεν υπάρχουν εντολές CLI, οπότε τα παρακάτω παραδείγματα αφορούν μόνο Rust.

Αρχικοποιήστε την επέκταση κατά τη δημιουργία του mint, και στη συνέχεια εκδίδετε, καίτε και συμφιλιώνετε την προσφορά με την πάροδο του χρόνου. Η έκδοση εισάγει ένα κρυπτογραφημένο ποσό στο εμπιστευτικό υπόλοιπο ενός παραλήπτη· η καύση αφαιρεί ένα κρυπτογραφημένο ποσό σε εκκρεμή καύση που στη συνέχεια ενσωματώνεται στην προσφορά. Και οι δύο λειτουργίες δημιουργούν αποδείξεις όπως μια εμπιστευτική μεταφορά.

confidential-mint-burn.rs
use spl_token_client::token::ExtensionInitializationParams;
// 1. Initialize at creation (alongside ConfidentialTransferMint).
ExtensionInitializationParams::ConfidentialMintBurn {
supply_elgamal_pubkey, // encrypts the confidential supply
decryptable_supply, // AES ciphertext of the initial supply (zero)
};
// 2. Mint an encrypted amount into a recipient's confidential balance.
token
.confidential_transfer_mint(
&mint_authority,
&destination_account,
None, // equality proof account
None, // ciphertext validity proof account
None, // range proof account
mint_amount,
&supply_elgamal_keypair,
&destination_elgamal_pubkey,
auditor_elgamal_pubkey, // Option
&supply_aes_key,
None, // supply account info, fetched if None
&[&mint_authority_keypair],
)
.await?;
// 3. Burn an encrypted amount from a holder's confidential balance into the
// mint's pending burn. Generates proofs like a confidential transfer.
token
.confidential_transfer_burn(
&owner,
&source_account,
None, // equality proof account
None, // ciphertext validity proof account
None, // range proof account
burn_amount,
&source_elgamal_keypair,
&supply_elgamal_pubkey,
auditor_elgamal_pubkey, // Option
&source_aes_key,
None, // burn account info, fetched if None
&[&owner_keypair],
)
.await?;
// 4. Fold the accumulated pending burn into the confidential supply.
token
.confidential_transfer_apply_pending_burn(&mint_authority, &[&mint_authority_keypair])
.await?;

Εναλλάξτε το κλειδί κρυπτογράφησης προσφοράς με confidential_transfer_rotate_supply_elgamal_pubkey (η εκκρεμής καύση πρέπει πρώτα να είναι μηδενική), και ανανεώστε το αναγνώσιμο κρυπτοκείμενο προσφοράς με confidential_transfer_update_decrypt_supply.

Επιχειρησιακές και κανονιστικές εκτιμήσεις

  • Φύλαξη κλειδιού ελεγκτή. Εάν ορίσετε ελεγκτή, το μυστικό κλειδί ελεγκτή αποτελεί κλειδί αποκρυπτογράφησης υψηλής αξίας. Αποθηκεύστε το και εναλλάξτε το με προσοχή, και αποφασίστε ποιος εντός του οργανισμού σας (ή ποια ρυθμιστική αρχή) το κατέχει.
  • Κανονιστική θέση. Ο έλεγχος διευθύνσεων και η ανάλυση γράφου αντισυμβαλλομένων συνεχίζουν να λειτουργούν, καθώς οι διευθύνσεις παραμένουν δημόσιες. Η παρακολούθηση βάσει ποσών εξαρτάται από το κλειδί ελεγκτή ή από επιλεκτική αποκάλυψη από τους κατόχους λογαριασμών. Αποφασίστε την προσέγγισή σας πριν από την έναρξη.
  • Εισαγωγή κατόχων. Η διαμόρφωση εμπιστευτικού λογαριασμού απαιτεί την υπογραφή του κατόχου. Για την ομαλή παροχή λογαριασμών στους χρήστες, ζητήστε τους να καταχωρίσουν ένα κλειδί ElGamal μία φορά και χρησιμοποιήστε τη διαδρομή μητρώου, που περιγράφεται στον Οδηγό Ενσωμάτωσης.
  • Αριθμός συναλλαγών. Μια εμπιστευτική μεταφορά καλύπτει επί του παρόντος μερικές εξαρτημένες συναλλαγές, καθώς οι αποδείξεις υπερβαίνουν το σημερινό όριο μεγέθους συναλλαγής. Η μορφή συναλλαγής v1 (που θα κυκλοφορήσει με το Agave v4.2) αυξάνει αυτό το όριο και αναμένεται να επιτρέψει μία μόνο συναλλαγή onchain.

Is this page helpful?

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