Gizli Transfer İhraçcı Kılavuzu

Solana'da Gizli Transfer Token'ları İhraç Etme

Bu kılavuz ihraçcılar içindir: Gizli Transfer uzantısını kullanan bir Token-2022 mint'i oluşturan ve yöneten ekipler. Mint oluşturma sırasında alacağınız kararları ve mint'in ömrü boyunca gerçekleştireceğiniz işlemleri kapsar. Tutucu tarafı akışı (yatırma, uygulama, transfer, çekme) için adım adım sayfalara, bu token'ları bir üründe desteklemek içinse Entegrasyon Kılavuzu'na bakın.

Gizli transferler, hesap adresleri, mint ve sahipleri herkese açık bırakırken transfer tutarlarını ve hesap bakiyelerini şifreli tutar. Zincir üstü kanıt doğrulaması için ZK ElGamal Proof Program'a dayanırlar; bu nedenle mint, yalnızca söz konusu programın etkin olduğu kümelerde kullanılabilir.

Kullanılabilirlik

Gizli transferler, Token-2022 program@v11.0.0 veya daha yeni bir sürümünü gerektirir. Bugün devnet'te kullanılabilir durumdadır ve Haziran 2026'da mainnet'te etkinleştirilmesi planlanmaktadır. Token Extensions Program her kümeye ayrı ayrı dağıtılır; bu nedenle hedeflediğiniz kümedeki dağıtımı doğrulayın.

Oluşturma sırasında alınan kararlar

Gizli Transfer uzantısı, mint başlatılmadan önce başlatılmalıdır ve sonradan eklenemez. Oluşturma sırasında şunlara karar verirsiniz:

  • Onay politikası: hesapların gizli transferlere izinsiz (auto) ya da mint'in gizli transfer yetkilisi tarafından onaylanarak (manual) dahil olup olamayacağı.
  • Denetçi: belirli bir tarafın mint için her transfer tutarını şifresini çözebilmesi amacıyla global bir denetçi ElGamal genel anahtarı ayarlanıp ayarlanmayacağı. İsteğe bağlıdır ve sonradan değiştirilebilir.
  • İsteğe bağlı tamamlayıcı uzantılar: gizli transfer ücretleri (transfer ücreti uzantısıyla eşleştirilmiş) ve gizli mint/burn; her ikisi de aşağıda ele alınmıştır. Bunların da oluşturma sırasında başlatılması gerekir.

Gizli bir mint oluşturun

CLI, onay politikasını --enable-confidential-transfers auto veya manual ile ayarlar; auto herhangi bir sahibinin kendi hesabını yapılandırmasına izin verirken, manual bunu gizli transfer yetkisinin onayı arkasına kilitler (bu yetki varsayılan olarak mint yetkisine atanır). İstemci tarafındaki yollar da aynı ayarları ConfidentialTransferMint parametreleri aracılığıyla alır: bir yetki, otomatik onay bayrağı ve isteğe bağlı bir denetçi anahtarı. Onay politikası ve denetçi daha sonra değiştirilebilir (bkz. Denetçi yapılandırma); yalnızca extension'ın varlığı oluşturma sırasında sabit olarak belirlenir.

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

Denetçi yapılandırma

Küresel bir denetçi, mint üzerinde depolanan bir ElGamal pubkey'dir. Ayarlandığında, her gizli transfer aynı zamanda tutarını bu anahtar altında şifreler; böylece ilgili gizli anahtara sahip olan kişi, mint için tüm transfer tutarlarını çözebilir. Gizli transferlerin denetim ve uyumluluk gereksinimleriyle uyumlu kalması bu şekilde sağlanır: genel kitle hiçbir şey görmez, denetçi her şeyi görür.

Gizli transfer yetkisi, denetçiyi istediği zaman ayarlayabilir, değiştirebilir veya kaldırabilir. Aynı işlem onay politikasını da günceller. CLI'de denetçi anahtarı, bir ElGamal pubkey'nin base64 kodlamasıdır; kaldırmak için --auditor-pubkey none, politikayı değiştirmek için --approve-policy auto|manual kullanın.

Rotasyon yalnızca gelecekteki transferleri etkiler. Zincirde zaten mevcut olan işlemlerdeki tutarlar, çalıştırıldıkları sırada etkin olan denetçi anahtarıyla şifreli kalmaya devam eder; dolayısıyla geçmiş aktiviteyi çözmeniz gerekiyorsa eski denetçi anahtarlarını saklayın.

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

Denetçi gizli anahtarı, mint için tüm transfer tutarlarını çözebilir. Bunu bir imzalama anahtarıyla aynı titizlikle saklayın ve rotasyon için plan yapın. Denetçiyi None olarak ayarlamak, hesap sahiplerinin kendileri dışında herkes için tutar görünürlüğünü devre dışı bırakır.

Hesapları onayla (manuel politika)

Manuel onay politikasıyla, gizli transferler için yapılandırılmış bir hesap, gizli transfer yetkilisi onu onaylayana kadar gizli işlem yapamaz. Bu, yayıncılara izin listesindeki veya KYC doğrulamasından geçmiş katılımcılar için bir kontrol kapısı sağlar. CLI bir onaylama komutu sunmadığından, onay işlemi bir istemci aracılığıyla gerçekleştirilir.

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

Gizli transfer ücretleri

Mint'iniz bir transfer ücreti alıyorsa ve transferler gizliyse, ücretin de gizli olarak tutulması gerekir. ConfidentialTransferFeeConfig uzantısı bunu yönetir ve mint oluşturma sırasında hem transfer ücreti hem de gizli transfer uzantılarıyla birlikte başlatılır.

Tutulan ücretler, alıcı hesaplarda şifreli olarak birikir, mint'e aktarılır, ardından tutulan ücreti çekme yetkililisi tarafından çekilir. Her ücret miktarı baştan sona şifreli kalır. Bunların hiçbiri CLI aracılığıyla sunulmaz. Tutulan ücreti çekme yetkilisinin ElGamal gizli anahtarı, tutulan ücret miktarlarının şifresini çözebilir; bu durum, kamuya açık ücret parametreleriyle birleşince transfer miktarları hakkında bilgi açığa çıkarabilir. Bu nedenle söz konusu anahtar hassas olarak değerlendirilmelidir.

Ücret yapılandırmasını başlat

Bunu ConfidentialTransferMint ve transfer ücreti yapılandırmasıyla birlikte aynı mint oluşturma işlemine dahil edin.

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

Tutulan ücretleri topla ve çek

Toplama işlemi, şifreli tutulan ücretleri hesaplardan mint'e taşır; çekme işlemi ise bunları mint'ten seçilen bir hesaba aktarır. İki yetkili devreye girer ve her biri mint yetkilisinden farklı olabilir:

  • Gizli transfer ücreti yetkilisi (ConfidentialTransferFeeConfig üzerinde ayarlanan authority), toplamayı etkinleştirir veya devre dışı bırakır.
  • Tutulan ücreti çekme yetkilisi (transfer ücreti uzantısının TransferFeeConfig alanından), toplanan ücretleri mint'ten çeker.

Para çekme işlemleri, satır içi olarak sağlanan veya bağlam durumu hesaplarına doğrulanan bir eşitlik ve bir aralık kanıtı gerektirir.

// 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 istemcisinde, basılan ücretlerin mint'ten çekilmesi (getWithdrawWithheldTokensFromMintForConfidentialTransferFeeInstruction) ayrıca bağlam durumu hesaplarına doğrulanmış bir eşitlik ve aralık kanıtı gerektirir; bu nedenle gizli bir transferle aynı kanıt hesabı modelini izler.

Gizli mint ve yakma

ConfidentialMintBurn uzantısı, mint otoritesinin doğrudan gizli bakiyelere karşı arz çıkarmasına ve yakmasına olanak tanır; toplam arzı şifreli tutar. Bu uzantıya sahip bir mint, genel para yatırma ve çekme yolunu devre dışı bırakır; zira tokenlar yalnızca gizli olarak var olur. Tam model için protokol belgelerine bakınız.

Gizli mint/yakma işlemi en kolay şekilde Rust spl-token-client aracılığıyla yapılır; bu araç gerekli kanıtları oluşturur ve işlemleri sizin için sıralar. @solana-program/token-2022 JS istemcisi düşük seviyeli talimat oluşturucuları (getConfidentialMintInstruction, getConfidentialBurnInstruction ve benzerleri) içerir ancak kanıtları oluşturan üst düzey bir yardımcı içermez ve CLI komutları da bulunmaz; bu nedenle aşağıdaki örnekler yalnızca Rust içindir.

Uzantıyı mint oluşturma sırasında başlatın, ardından zaman içinde arzı mint edin, yakın ve mutabık kılın. Mint işlemi, alıcının gizli bakiyesine şifreli bir miktar gönderir; yakma işlemi ise daha sonra arza katlanacak olan bekleyen bir yakma işlemine şifreli bir miktar aktarır. Her ikisi de gizli bir transfer gibi kanıtlar üretir.

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

Arz şifreleme anahtarını confidential_transfer_rotate_supply_elgamal_pubkey ile döndürün (önce bekleyen yakma sıfır olmalıdır) ve okunabilir arz şifreli metnini confidential_transfer_update_decrypt_supply ile yenileyin.

Operasyonel ve uyumluluk değerlendirmeleri

  • Denetçi anahtarı güvenliği. Bir denetçi belirlediyseniz, denetçi gizli anahtarı yüksek değerli bir şifre çözme anahtarıdır. Dikkatli bir şekilde saklayın ve döndürün; kuruluşunuz içinde kimin (veya hangi düzenleyici kurumun) bu anahtarı tutacağına karar verin.
  • Uyumluluk tutumu. Adresler herkese açık kalmaya devam ettiğinden adres tarama ve karşı taraf grafik analizi çalışmaya devam eder. Miktara dayalı izleme, denetçi anahtarına veya hesap sahiplerinin seçici ifşasına bağlıdır. Başlatmadan önce yaklaşımınıza karar verin.
  • Kullanıcı katılımı. Gizli bir hesabın yapılandırılması, sahibinin imzasını gerektirir. Kullanıcılar için hesapları sorunsuz bir şekilde sağlamak adına, onlara bir kez ElGamal anahtarı kaydettirin ve Entegrasyon Kılavuzu'nda açıklanan kayıt defteri yolunu kullanın.
  • İşlem sayısı. Kanıtlar günümüzdeki işlem boyutu sınırını aştığından, gizli bir transfer şu anda birkaç bağımlı işlemi kapsamaktadır. İşlem formatı v1 (Agave v4.2 ile birlikte gelecek), bu sınırı artırır ve tek bir zincir üstü işleme olanak tanıması beklenmektedir.

Is this page helpful?

© 2026 Solana Vakfı. Tüm hakları saklıdır.