Luottamuksellisten saldojen liikkeeseenlaskijan opas

Luottamuksellisten saldojen tokenien liikkeeseenlasku Solanassa

Tämä opas on tarkoitettu liikkeeseenlaskijoille: tiimeille, jotka luovat ja hallinnoivat Token-2022-minttejä, jotka käyttävät luottamuksellisia saldoja. Opas kattaa mintinluomisvaiheen päätökset sekä mintin elinkaaren aikana suoritettavat toimenpiteet. Haltijan puolen työnkulkua (talletus, soveltaminen, siirto, nosto) varten katso vaiheittaiset sivut, ja näiden tokenien tuoteintegraatiota varten katso Integrointiopas.

Luottamukselliset saldot pitävät siirtomäärät ja tilisaldot salattuina samalla kun tilin osoitteet, mintti ja omistajat pysyvät julkisina. Laajennus perustuu ZK ElGamal Proof Program -ohjelmaan ketjunsisäistä todisteiden verifiointia varten, joten minttiä voidaan käyttää klustereissa, joissa kyseinen ohjelma on käytössä.

Luomishetkellä tehtävät päätökset

Luottamuksellisten saldojen laajennus täytyy alustaa ennen mintin alustamista, eikä sitä voi lisätä jälkikäteen. Luomishetkellä päätät:

  • Hyväksymiskäytäntö: voivatko tilit ottaa luottamukselliset saldot käyttöön ilman lupaa (auto) vai täytyykö mintin luottamuksellisten saldojen viranomaisen hyväksyä ne (manual).
  • Tilintarkastaja: asetetaanko globaali tilintarkastajan ElGamal-julkinen avain, jotta nimetty osapuoli voi purkaa jokaisen siirtosumman salakirjoituksen mintille. Valinnainen ja voidaan muuttaa myöhemmin.
  • Valinnaiset lisälaajennnukset: luottamukselliset siirtomaksut (yhdistettynä siirtomaksulaajennukseen) ja luottamuksellinen mint/burn, joita käsitellään alla. Nämä täytyy myös alustaa luomishetkellä.

Luo luottamuksellinen mint

CLI asettaa hyväksymiskäytännön valitsimella --enable-confidential-transfers auto tai manual; auto antaa minkä tahansa haltijan määrittää oman tilinsä, kun taas manual edellyttää hyväksyntää luottamuksellisten saldojen viranomaiselta (joka oletuksena on minttausviranomainen). Asiakaspolut käyttävät samoja asetuksia ConfidentialTransferMint-parametrien kautta: viranomainen, automaattisen hyväksynnän lipuke ja valinnainen tilintarkastajan avain. Sekä hyväksymiskäytäntöä että tilintarkastajaa voidaan muuttaa myöhemmin (katso Tilintarkastajan määrittäminen); ainoastaan laajennuksen olemassaolo on kiinteästi määritetty luomishetkellä.

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

Määritä tilintarkastaja

Yleinen tilintarkastaja on ElGamal-julkinen avain, joka on tallennettu minttiin. Kun se on asetettu, jokainen luottamuksellinen siirto salaa summansa myös tällä avaimella, joten vastaavan salaisen avaimen haltija voi purkaa kaikkien mintin siirtojen salauksen. Näin luottamukselliset saldot pysyvät yhteensopivina tarkastus- ja vaatimustenmukaisuusvaatimusten kanssa: yleisö ei näe mitään, tilintarkastaja näkee kaiken.

Luottamuksellisten saldojen viranomainen voi asettaa, vaihtaa tai poistaa tilintarkastajan milloin tahansa. Sama toimenpide päivittää myös hyväksymiskäytännön. CLI:ssä tilintarkastajan avain on ElGamal-julkisen avaimen base64-koodaus; poista se antamalla --auditor-pubkey none ja vaihda käytäntö antamalla --approve-policy auto|manual.

Vaihto vaikuttaa vain tuleviin siirtoihin. Lohkoketjussa jo olevien tapahtumien summat pysyvät salattuna sille tilintarkastajan avaimelle, joka oli aktiivinen niiden suoritushetkellä, joten säilytä vanhat tilintarkastajan avaimet, jos sinun täytyy purkaa historiallisen toiminnan salaus.

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

Tilintarkastajan salainen avain voi purkaa jokaisen mintin siirtosumman salauksen. Säilytä sitä yhtä huolellisesti kuin allekirjoitusavainta, ja varaudu avaimen vaihtoon. Tilintarkastajan asettaminen arvoon None poistaa saldojen näkyvyyden kaikilta muilta paitsi tilien omistajilta itseltään.

Tilien hyväksyminen (manuaalinen käytäntö)

Manuaalisen hyväksymiskäytännön kanssa luottamuksellisille saldoille konfiguroitu tili ei voi suorittaa luottamuksellisia tapahtumia ennen kuin luottamuksellisten saldojen viranomainen hyväksyy sen. Tämä antaa liikkeeseenlaskijoille portin sallittujen tai KYC-vahvistettujen osallistujien hallintaan. CLI ei tarjoa hyväksyntäkomentoa, joten hyväksyntä tehdään asiakkaan kautta.

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

Luottamukselliset siirtomaksut

Jos mintissäsi on siirtomaksu ja siirrot ovat luottamuksellisia, myös maksu täytyy pidättää luottamuksellisesti. ConfidentialTransferFeeConfig-laajennus huolehtii tästä, ja se alustetaan mintin luomisen yhteydessä sekä siirtomaksu- että luottamuksellisten saldojen laajennusten rinnalla.

Pidätetyt maksut kertyvät salattuina vastaanottajatileille, kerätään mintille ja nostetaan sitten pidätettyjen varojen nostamisesta vastaavan viranomaisen toimesta. Jokainen maksusumma pysyy salattuna koko ajan. Tätä ei ole saatavilla CLI:n kautta. Pidätettyjen varojen nostamisesta vastaavan viranomaisen ElGamal-salainen avain voi purkaa pidätettyjen maksujen salauksen, mikä yhdistettynä julkisiin maksuparametreihin voi paljastaa tietoja siirtosummista, joten käsittele kyseistä avainta arkaluonteisena.

Alusta maksuasetukset

Sisällytä tämä ConfidentialTransferMint:n ja siirtomaksun asetusten kanssa samaan mint-luomiseen.

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

Kerää ja nosta pidätetyt maksut

Kerääminen siirtää salatut pidätetyt maksut tileiltä minttiin; nosto siirtää ne mintistä valitulle tilille. Prosessiin osallistuu kaksi auktoriteettia, ja kumpikin voi poiketa mint-auktoriteetista:

  • Luottamuksellinen siirtomaksuauktoriteetti (authority, joka on asetettu ConfidentialTransferFeeConfig:lle) ottaa keräämisen käyttöön tai poistaa sen käytöstä.
  • Pidätettyjen nostamisauktoriteetti (siirtomaksulaajennuksen TransferFeeConfig:stä) nostaa kerätyt maksut mintistä.

Nostot edellyttävät yhtäläisyys- ja aluetodisteita, jotka toimitetaan suoraan tai vahvistetaan kontekstitilatileille.

// 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-asiakkaassa kerättyjen maksujen nostaminen mintistä (getWithdrawWithheldTokensFromMintForConfidentialTransferFeeInstruction) edellyttää lisäksi yhtäläisyys- ja aluetodisteita, jotka on vahvistettu kontekstitilatileille, joten se noudattaa samaa todistustilimallia kuin luottamuksellinen siirto.

Luottamuksellinen mint ja poltto

ConfidentialMintBurn-laajennus antaa mint-auktoriteetin laskea liikkeeseen ja polttaa tarjontaa suoraan luottamuksellisia saldoja vastaan pitäen kokonaistarjonnan salattuna. Tätä laajennusta käyttävä mint poistaa käytöstä julkisen talletus- ja nostopolun, koska tokenit ovat aina olemassa vain luottamuksellisesti. Katso protokolladokumentaatio täydellisen mallin osalta.

Luottamuksellinen mint/poltto on helpointa Rust spl-token-client:n kautta, joka luo tarvittavat todisteet ja järjestää transaktiot puolestasi. The @solana-program/token-2022 JS-asiakkaassa toimitetaan matalan tason käskyjen rakentajat (getConfidentialMintInstruction, getConfidentialBurnInstruction ja muut), mutta ei korkean tason apufunktiota todisteiden rakentamiseen, eikä CLI-komentoja ole, joten alla olevat esimerkit ovat vain Rust-muodossa.

Alusta laajennus luomishetkellä, minkä jälkeen voit lyödä, polttaa ja täsmäyttää tarjontaa ajan myötä. Lyöminen laskee liikkeelle salatun määrän vastaanottajan luottamukselliseen saldoon; polttaminen poistaa salatun määrän odottavaan polttoon, joka myöhemmin yhdistetään tarjontaan. Molemmat tuottavat todisteet samaan tapaan kuin luottamuksellinen siirto.

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?;

Kierrätä tarjonnan salausavain komennolla confidential_transfer_rotate_supply_elgamal_pubkey (odottavan polton on ensin oltava nolla) ja päivitä luettava tarjonnan salateksti komennolla confidential_transfer_update_decrypt_supply.

Toiminnalliset ja vaatimustenmukaisuusnäkökohdat

  • Tarkastajan avainten hallinta. Jos määrität tarkastajan, tarkastajan salainen avain on erittäin arvokas salausavain. Säilytä ja kierrätä sitä huolellisesti, ja päätä, kuka organisaatiossasi (tai mikä viranomainen) pitää sitä hallussaan.
  • Vaatimustenmukaisuusasento. Osoitteen tarkistus ja vastapuolen verkostoanalyysi toimivat edelleen, koska osoitteet pysyvät julkisina. Määräpohjainen seuranta riippuu tarkastajan avaimesta tai tilien omistajien valikoivasta tiedonjaosta. Päätä lähestymistapasi ennen käyttöönottoa.
  • Haltijoiden käyttöönotto. Luottamuksellisen tilin määrittäminen edellyttää omistajan allekirjoitusta. Ottaaksesi tilit käyttöön käyttäjille sujuvasti, pyydä heitä rekisteröimään ElGamal-avain kerran ja käyttämään rekisteripolkua, joka on kuvattu kohdassa Integration Guide.
  • Tapahtumien määrä. Luottamuksellinen siirto kattaa tällä hetkellä useita riippuvaisia tapahtumia, koska todisteet ylittävät nykyisen tapahtumakoon rajan. Tapahtumamuoto v1 (julkaistaan Agave v4.2:n myötä) nostaa tätä rajaa ja sen odotetaan mahdollistavan yhden ketjussa tapahtuvan transaktion.

Is this page helpful?

© 2026 Solana Foundation. Kaikki oikeudet pidätetään.