Luottamuksellisen siirron liikkeeseenlaskijan opas

Luottamuksellisten siirtotokenien liikkeeseenlasku Solanassa

Tämä opas on tarkoitettu liikkeeseenlaskijoille: tiimeille, jotka luovat ja hallinnoivat Token-2022-mintiä, joka käyttää Confidential Transfer -laajennusta. Se kattaa päätökset, jotka teet mintin luomisen yhteydessä, sekä toimenpiteet, joita suoritat mintin elinkaaren aikana. Haltijan puolen prosessin (talletus, käyttöönotto, siirto, nosto) osalta katso vaiheittaiset sivut, ja näiden tokenien tuotteeseen integroinnin osalta katso Integrointiopas.

Luottamukselliset siirrot pitävät siirtomäärät ja tilisaldot salattuina, mutta jättävät tilin osoitteet, mintin ja omistajat julkisiksi. Ne perustuvat ZK ElGamal Proof -ohjelmaan ketjussa tapahtuvaa todisteiden varmentamista varten, joten minttiä voidaan käyttää klustereissa, joissa kyseinen ohjelma on käytössä.

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

Luottamuksellinen siirto -laajennus täytyy alustaa ennen mintin alustamista, eikä sitä voi lisätä myöhemmin. Luomishetkellä päätetään:

  • Hyväksymiskäytäntö: voivatko tilit ottaa luottamukselliset siirrot käyttöön ilman lupaa (auto) vai täytyykö mintin luottamuksellisen siirtoviranomaisen 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 --enable-confidential-transfers auto- tai manual-valitsimella; auto sallii jokaisen haltijan määrittää oman tilinsä, kun taas manual edellyttää hyväksyntää luottamukselliselta siirtoviranomaiselta (joka oletuksena on mint-auktoriteetti). Asiakaspolut käyttävät samoja asetuksia ConfidentialTransferMint-parametrien kautta: auktoriteetti, automaattinen hyväksyntälippu ja valinnainen tilintarkastajan avain. Sekä hyväksymiskäytäntöä että tilintarkastajaa voidaan muuttaa myöhemmin (katso Määritä tilintarkastaja); ainoastaan laajennuksen olemassaolo itsessään on kiinnitetty luomishetkellä.

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

Määritä tilintarkastaja

Globaali tilintarkastaja on mintille tallennettu ElGamal-julkinen avain. Kun se on asetettu, jokainen luottamuksellinen siirto salaa summansa lisäksi myös tällä avaimella, joten se, jolla on vastaava salainen avain, voi purkaa kaikkien mintin siirtosummien salakirjoituksen. Näin luottamukselliset siirrot pysyvät yhteensopivina tarkastus- ja vaatimustenmukaisuusvaatimusten kanssa: yleisö ei näe mitään, tilintarkastaja näkee kaiken.

Luottamuksellisen siirron viranomainen voi asettaa, vaihtaa tai poistaa tilintarkastajan milloin tahansa. Sama toiminto päivittää myös hyväksymiskäytännön. CLI:ssä tilintarkastajan avain on ElGamal-julkisen avaimen base64-koodaus; anna --auditor-pubkey none poistaaksesi sen ja --approve-policy auto|manual muuttaaksesi käytäntöä.

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ö)

Manuaalisella hyväksymiskäytännöllä luottamuksellisiin siirtoihin määritetty tili ei voi suorittaa luottamuksellisia tapahtumia ennen kuin luottamuksellisen siirron viranomainen hyväksyy sen. Tämä antaa liikkeeseenlaskijoille portin sallituille tai KYC-varmennetuille osallistujille. CLI ei tarjoa hyväksymiskomentoa, joten hyväksyminen tehdään asiakkaan kautta.

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

Luottamukselliset siirtomaksut

Jos mintissäsi on käytössä siirtomaksu ja siirrot ovat luottamuksellisia, myös maksu on pidätettävä luottamuksellisesti. ConfidentialTransferFeeConfig-laajennus käsittelee tämän, ja se alustetaan mintin luomisen yhteydessä sekä siirtomaksu- että luottamuksellinen siirto -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.