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 asetettuConfidentialTransferFeeConfig: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 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 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.
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 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?