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ä.
Saatavuus
Luottamukselliset siirrot edellyttävät Token-2022
program@v11.0.0
tai uudempaa versiota. Ne ovat tänään saatavilla devnetissä ja on suunniteltu
otettavaksi käyttöön mainnetissä kesäkuussa 2026. Token Extension Program on
otettu käyttöön erikseen kullakin klusterilla, joten vahvista käyttöönotto
kohdeklusterissasi.
Luomisen yhteydessä tehtävät päätökset
Confidential Transfer -laajennus täytyy alustaa ennen mintin alustamista, eikä sitä voi lisätä jälkikäteen. Luomisen yhteydessä päätät:
- Hyväksymiskäytäntö: voivatko tilit liittyä luottamuksellisiin siirtoihin
ilman lupaa (
auto) vai täytyykö mintin luottamuksellisen siirron auktoriteetin hyväksyä ne (manual). - Tilintarkastaja: asetetaanko globaali tilintarkastajan ElGamal-julkinen avain, jotta nimetty osapuoli voi purkaa jokaisen mintin siirtomäärän salauksen. Valinnainen ja muutettavissa myöhemmin.
- Valinnaiset lisälaajennukset: luottamukselliset siirtomaksut (yhdistettynä siirtomaksulaajennukseen) ja luottamuksellinen liikkeeseenlasku/poltto, joita molempia käsitellään alla. Nämä on myös alustettava luomisen yhteydessä.
Luo luottamuksellinen mint
CLI asettaa hyväksymiskäytännön --enable-confidential-transfers auto- tai
manual-asetuksella; auto sallii jokaisen haltijan määrittää oman tilinsä,
kun taas manual edellyttää hyväksyntää luottamuksellisen siirron
auktoriteetilta (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 ElGamal-julkinen avain, joka on tallennettu mintiin. Kun se on asetettu, jokainen luottamuksellinen siirto salaa summansa myös tällä avaimella, joten se, jolla on vastaava salainen avain, voi purkaa kaikkien mintin siirtojen summat. Näin luottamukselliset siirrot pysyvät yhteensopivina tilintarkastus- ja vaatimustenmukaisuusvaatimusten kanssa: yleisö ei näe mitään, tilintarkastaja näkee kaiken.
Luottamuksellisen siirron auktoriteetti voi asettaa, kiertää 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öä.
Kierrätys vaikuttaa vain tuleviin siirtoihin. Jo lohkoketjussa olevien transaktioiden summat pysyvät salattuina sillä tilintarkastajan avaimella, joka oli voimassa 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.
Säilytä se yhtä huolellisesti kuin allekirjoitusavainta ja suunnittele
kierrätys etukäteen. Tilintarkastajan asettaminen arvoon None poistaa
summien näkyvyyden kaikilta muilta paitsi tilien omistajilta itseltään.
Hyväksy tilit (manuaalinen käytäntö)
Manuaalisen hyväksyntäkäytännön myötä luottamuksellisiin siirtoihin määritetty tili ei voi suorittaa luottamuksellisia transaktioita ennen kuin luottamuksellisen siirron valtuutus hyväksyy sen. Tämä antaa liikkeeseenlaskijoille portin sallituille tai KYC-varmennetuille osallistujille. CLI ei tarjoa hyväksyntäkomentoa, joten hyväksyntä tehdään asiakassovelluksen kautta.
token.confidential_transfer_approve_account(&token_account,&authority,&[&authority_keypair],).await?;
Luottamukselliset siirtomaksut
Jos liikkeeseenlaskusi veloittaa
siirtomaksun ja siirrot ovat
luottamuksellisia, myös maksu on pidätettävä luottamuksellisesti.
ConfidentialTransferFeeConfig-laajennus huolehtii tästä, ja se alustetaan
liikkeeseenlaskun luomisen yhteydessä sekä siirtomaksun että luottamuksellisen
siirron laajennusten kanssa.
Pidätetyt maksut kertyvät salattuina vastaanottajatileille, kerätään liikkeeseenlaskuun ja nostetaan sitten pidätettyjen maksujen nostovaltuuttajan toimesta. Jokainen maksusumma pysyy salattuna koko prosessin ajan. Tätä ei ole saatavilla CLI:n kautta. Pidätettyjen maksujen nostovaltuuttajan ElGamal-salainen avain voi purkaa pidätettyjen maksujen salauksen, mikä yhdistettynä julkisiin maksuparametreihin voi paljastaa tietoja siirtosummista – käsittele siksi kyseistä avainta arkaluonteisena.
Alusta maksukonfiguraatio
Sisällytä tämä ConfidentialTransferMint:n ja siirtomaksukonfiguraation
rinnalle samaan liikkeeseenlaskun 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ä liikkeeseenlaskuun; nostaminen siirtää ne liikkeeseenlaskusta valitulle tilille. Prosessiin osallistuu kaksi valtuutusta, joista kumpikin voi poiketa liikkeeseenlaskun valtuutuksesta:
- Luottamuksellisen siirtomaksun valtuutus
(
ConfidentialTransferFeeConfig:lle asetettuauthority) ottaa keräämisen käyttöön tai poistaa sen käytöstä. - Pidätettyjen maksujen nostovaltuuttaja (siirtomaksulaajennnuksen
TransferFeeConfig:stä) nostaa kerätyt maksut liikkeeseenlaskusta.
Nostot edellyttävät yhtäläisyys- ja aluetodisteita, jotka toimitetaan suoraan tai vahvistetaan kontekstitila-tileihin.
// 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 NoneNone, // withheld tokens info, fetched if None&withdraw_withheld_elgamal_keypair,&destination_elgamal_pubkey,&new_decryptable_available_balance,&[&withdraw_withheld_authority_keypair],).await?;
JS-asiakkaassa lyötyjen maksujen nostaminen mintistä
(getWithdrawWithheldTokensFromMintForConfidentialTransferFeeInstruction)
edellyttää lisäksi yhtäläisyys- ja aluetodistetta, jotka on vahvistettu
kontekstitila-tileihin, joten se noudattaa samaa todistustilikaavaa kuin
luottamuksellinen siirto.
Luottamuksellinen lyönti ja poltto
ConfidentialMintBurn-laajennus antaa lyöntiviranomaiselle mahdollisuuden
laskea liikkeelle ja polttaa tarjontaa suoraan luottamuksellisia saldoja
vastaan, pitäen kokonaistarjonnan salattuna. Tällä laajennuksella varustettu
mint poistaa käytöstä julkisen talletus- ja nostopolun, koska tokenit ovat
olemassa vain luottamuksellisessa muodossa. Katso
protokolladokumentaatio
täydellisen mallin osalta.
Luottamuksellinen lyönti/poltto on helpointa Rustin
spl-token-client-kirjaston kautta, joka luo tarvittavat todisteet ja
järjestää tapahtumat puolestasi. @solana-program/token-2022 JS-asiakkaassa
toimitetaan matalan tason käskyjen rakentajat
(getConfidentialMintInstruction, getConfidentialBurnInstruction ja muut),
mutta ei korkean tason apuohjelmaa todisteiden rakentamiseen, eikä
CLI-komentoja ole, joten alla olevat esimerkit ovat vain Rust-muodossa.
Alusta laajennus mintin luomisen yhteydessä, lyö sitten, polta ja täsmäytä tarjonta ajan mittaan. Lyönti laskee salatun summan vastaanottajan luottamukselliseen saldoon; poltto poistaa salatun summan odottavaan polttoon, joka myöhemmin yhdistetään tarjontaan. Molemmat tuottavat todisteita kuten luottamuksellinen siirto.
use spl_token_client::token::ExtensionInitializationParams;// 1. Initialize at creation (alongside ConfidentialTransferMint).ExtensionInitializationParams::ConfidentialMintBurn {supply_elgamal_pubkey, // encrypts the confidential supplydecryptable_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 accountNone, // ciphertext validity proof accountNone, // range proof accountmint_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 accountNone, // ciphertext validity proof accountNone, // range proof accountburn_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 oltava
ensin nolla), ja päivitä luettava tarjonnan salateksti komennolla
confidential_transfer_update_decrypt_supply.
Operatiiviset ja sääntelynmukaisuuteen liittyvät näkökohdat
- Tilintarkastajan avainten hallinta. Jos määrität tilintarkastajan, tilintarkastajan salainen avain on arvokas salausavain. Säilytä ja kierrätä sitä huolellisesti, ja päätä kuka organisaatiossasi (tai mikä sääntelyviranomainen) hallussapitää sitä.
- Sääntelynmukaisuuden asema. Osoitteiden seulonta ja vastapuoliverkon analyysi toimivat edelleen, koska osoitteet pysyvät julkisina. Summapohjainen seuranta riippuu tilintarkastajan avaimesta tai tilien omistajien valikoivasta tiedonluovutuksesta. Päätä lähestymistapasi ennen käyttöönottoa.
- Käyttäjien perehdyttäminen. Luottamuksellisen tilin määrittäminen edellyttää omistajan allekirjoitusta. Tilin sujuvaa käyttöönottoa varten pyydä käyttäjiä rekisteröimään ElGamal-avain kerran ja käyttämään rekisteripolkua, joka on kuvattu Integrointioppaassa.
- Tapahtumienmäärä. Luottamuksellinen siirto kattaa tällä hetkellä muutaman riippuvaisen tapahtuman, koska todisteet ylittävät nykyisen tapahtumakokorajan. Tapahtumaformaatti v1 (tulossa Agave v4.2:n myötä) nostaa tätä rajaa ja sen odotetaan mahdollistavan yksittäisen ketjussa tapahtuvan transaktion.
Is this page helpful?