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

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

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

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

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

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

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

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

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

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

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

Ένας καθολικός ελεγκτής είναι ένα ElGamal pubkey αποθηκευμένο στο 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 απενεργοποιεί την ορατότητα ποσών για όλους εκτός από τους ίδιους τους κατόχους λογαριασμού.

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

Με μια χειροκίνητη πολιτική έγκρισης, ένας λογαριασμός που έχει ρυθμιστεί για εμπιστευτικές μεταφορές δεν μπορεί να πραγματοποιεί εμπιστευτικές συναλλαγές έως ότου τον εγκρίνει η αρχή εμπιστευτικής μεταφοράς. Αυτό παρέχει στους εκδότες μια πύλη για συμμετέχοντες που βρίσκονται σε λίστα επιτρεπόμενων ή έχουν υποβληθεί σε 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, η ανάληψη των συλλεγμένων τελών από το mint (getWithdrawWithheldTokensFromMintForConfidentialTransferFeeInstruction) απαιτεί επιπλέον απόδειξη ισότητας και εύρους επαληθευμένη σε λογαριασμούς κατάστασης περιβάλλοντος, οπότε ακολουθεί το ίδιο μοτίβο λογαριασμού αποδείξεων με μια εμπιστευτική μεταφορά.

Εμπιστευτικό mint και burn

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

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

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

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 (το εκκρεμές burn πρέπει πρώτα να είναι μηδέν), και ανανεώστε το αναγνώσιμο ciphertext προσφοράς με confidential_transfer_update_decrypt_supply.

Λειτουργικές και κανονιστικές εκτιμήσεις

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

Is this page helpful?

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