إصدار رموز التحويل السري على سولانا
هذا الدليل مخصص لـ المُصدرين: الفرق التي تنشئ وتُشغّل نقطة سك Token-2022 تستخدم امتداد التحويل السري. يغطي القرارات التي تتخذها عند إنشاء نقطة السك والعمليات التي تُجريها طوال دورة حياتها. للاطلاع على تدفق جانب المالك (الإيداع، والتطبيق، والتحويل، والسحب) راجع الصفحات التفصيلية خطوة بخطوة، ولدعم هذه الرموز في منتجك راجع دليل التكامل.
تُبقي التحويلات السرية مبالغ التحويل وأرصدة الحسابات مشفرة مع إبقاء عناوين الحسابات ونقطة السك والملّاك علنية. تعتمد على برنامج ZK ElGamal Proof لتحقق من الإثباتات على السلسلة، لذا فإن نقطة السك قابلة للاستخدام على الشبكات التي يكون فيها هذا البرنامج مُفعَّلاً.
التوفر
تتطلب التحويلات السرية برنامج Token-2022
program@v11.0.0
أو إصدار أحدث. وهي متاحة على devnet اليوم ومن المقرر تفعيلها على mainnet في
يونيو 2026. يتم نشر Token Extensions Program بشكل منفصل على كل شبكة، لذا تحقق
من النشر على الشبكة التي تستهدفها.
القرارات التي تتخذها عند الإنشاء
يجب تهيئة امتداد التحويل السري قبل تهيئة نقطة السك ولا يمكن إضافته لاحقاً. عند الإنشاء تحدد:
- سياسة الموافقة: ما إذا كان بإمكان الحسابات الاشتراك في التحويلات السرية
بدون إذن (
auto) أو يجب الحصول على موافقة سلطة التحويل السري لنقطة السك (manual). - المدقق: ما إذا كنت تريد تعيين مفتاح ElGamal عام لمدقق عالمي بحيث يستطيع طرف مُعيَّن فك تشفير كل مبلغ تحويل لنقطة السك. اختياري، ويمكن تغييره لاحقاً.
- امتدادات مصاحبة اختيارية: رسوم التحويل السري (مقترنة بامتداد رسوم التحويل) وسك/حرق الرموز بشكل سري، وكلاهما مشمول أدناه. يجب أيضاً تهيئة هذه الامتدادات عند الإنشاء.
إنشاء سك سري
تضبط واجهة سطر الأوامر سياسة الموافقة باستخدام
--enable-confidential-transfers auto أو manual؛ يتيح auto لأي حامل ضبط
حسابه الخاص، بينما يضع manual ذلك خلف موافقة سلطة النقل السري (التي تكون
افتراضيًا سلطة السك). تأخذ مسارات العميل الإعدادات ذاتها من خلال معاملات
ConfidentialTransferMint: سلطة، وعلامة الموافقة التلقائية، ومفتاح مراجع
اختياري. يمكن تغيير كل من سياسة الموافقة والمراجع لاحقًا (انظر
تهيئة مراجع)؛ فقط وجود الامتداد نفسه هو الثابت عند
الإنشاء.
$ spl-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb create-token --enable-confidential-transfers auto
تهيئة مراجع
المراجع العام هو مفتاح عام ElGamal مخزّن على السك. عند تعيينه، يُشفّر كل نقل سري مبلغه أيضًا بهذا المفتاح، بحيث يستطيع من يحمل المفتاح السري المقابل فك تشفير جميع مبالغ النقل الخاصة بالسك. وهكذا تبقى عمليات النقل السري متوافقة مع متطلبات التدقيق والامتثال: لا يرى الجمهور شيئًا، بينما يرى المراجع كل شيء.
يمكن لسلطة النقل السري تعيين المراجع أو تدويره أو إزالته في أي وقت. تُحدّث
العملية ذاتها سياسة الموافقة أيضًا. في واجهة سطر الأوامر، يكون مفتاح المراجع
بترميز base64 لمفتاح عام ElGamal؛ مرّر --auditor-pubkey none لإزالته و
--approve-policy auto|manual لتغيير السياسة.
لا يؤثر التدوير إلا على عمليات النقل المستقبلية. تبقى المبالغ في المعاملات المسجّلة على السلسلة مشفّرةً بمفتاح المراجع الذي كان نشطًا وقت تنفيذها، لذا احتفظ بمفاتيح المراجع القديمة إذا كنت بحاجة إلى فك تشفير النشاط التاريخي.
$ spl-token update-confidential-transfer-settings <MINT_PUBKEY> --auditor-pubkey <AUDITOR_ELGAMAL_PUBKEY>
يستطيع المفتاح السري للمراجع فك تشفير كل مبلغ نقل خاص بالسك. احتفظ به بنفس
الصرامة المتبعة مع مفاتيح التوقيع، وضع خطةً للتدوير. يؤدي تعيين المراجع إلى
None إلى تعطيل رؤية المبالغ للجميع باستثناء أصحاب الحسابات أنفسهم.
الموافقة على الحسابات (سياسة يدوية)
مع سياسة الموافقة اليدوية، لا يمكن للحساب المُهيَّأ للتحويلات السرية إجراء معاملات سرية حتى تُوافق عليه سلطة التحويل السري. يمنح ذلك الجهات المُصدِرة بوابةً للمشاركين المُدرَجين في القائمة البيضاء أو الخاضعين لإجراءات KYC. لا تتيح واجهة سطر الأوامر (CLI) أمر الموافقة مباشرةً، لذا تتم عملية الموافقة عبر العميل.
token.confidential_transfer_approve_account(&token_account,&authority,&[&authority_keypair],).await?;
رسوم التحويل السري
إذا كانت عملية سك العملة تفرض
رسوم تحويل وكانت التحويلات سرية، فيجب
أيضاً حجب الرسوم بصورة سرية. يتولى الامتداد ConfidentialTransferFeeConfig
معالجة ذلك، ويُهيَّأ عند إنشاء عملية السك جنباً إلى جنب مع امتدادَي رسوم التحويل
والتحويل السري.
تتراكم الرسوم المحجوبة مشفَّرةً في حسابات المستلمين، ثم تُجمَّع إلى نقطة السك، ومن ثَمَّ يسحبها المخوَّل بسحب المحجوب. تبقى جميع مبالغ الرسوم مشفَّرةً طوال العملية. لا شيء من ذلك مكشوف عبر واجهة سطر الأوامر (CLI). يمكن للمفتاح السري ElGamal الخاص بسلطة سحب المحجوب فك تشفير مبالغ الرسوم المحجوبة، والتي بالاقتران مع معاملات الرسوم العامة قد تكشف معلومات حول مبالغ التحويل، لذا عامِل هذا المفتاح باعتباره معلومةً حساسة.
تهيئة إعداد الرسوم
أدرج هذا جنباً إلى جنب مع ConfidentialTransferMint وإعداد رسوم التحويل في
عملية إنشاء السك ذاتها.
use spl_token_client::token::ExtensionInitializationParams;ExtensionInitializationParams::ConfidentialTransferFeeConfig {authority: Some(authority.pubkey().into()),withdraw_withheld_authority_elgamal_pubkey: withdraw_withheld_elgamal_pubkey,};
جمع الرسوم المحجوبة وسحبها
يؤدي الجمع إلى نقل الرسوم المحجوبة المشفَّرة من الحسابات إلى نقطة السك؛ أما السحب فينقلها من نقطة السك إلى حساب مختار. يشترك في ذلك سلطتان، وقد تختلف أيٌّ منهما عن سلطة السك:
- سلطة رسوم التحويل السري (الـ
authorityالمُعيَّنة علىConfidentialTransferFeeConfig) تُمكِّن عملية الجمع أو تُعطِّلها. - سلطة سحب المحجوب (من
TransferFeeConfigالخاصة بامتداد رسوم التحويل) تسحب الرسوم المجموعة من نقطة السك.
تتطلب عمليات السحب إثبات مساواة وإثبات نطاق، يتم تقديمهما مضمّنَين أو التحقق منهما في حسابات حالة السياق.
// 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، يتطلب سحب الرسوم المحصودة من الـ mint
(getWithdrawWithheldTokensFromMintForConfidentialTransferFeeInstruction) أيضاً
إثبات مساواة وإثبات نطاق تم التحقق منهما في حسابات حالة السياق، لذا فهو يتبع نفس
نمط حساب الإثبات المستخدم في التحويل السري.
الإصدار والحرق السري
يتيح امتداد ConfidentialMintBurn لسلطة الإصدار إصدار الرصيد وحرقه مباشرةً
مقابل الأرصدة السرية، مع إبقاء إجمالي المعروض مشفراً. يُعطّل الـ mint المزوّد
بهذا الامتداد مسار الإيداع والسحب العلني، إذ لا توجد الرموز إلا بصورة سرية. راجع
توثيق البروتوكول
للاطلاع على النموذج الكامل.
الإصدار والحرق السري أسهل ما يكون من خلال مكتبة Rust spl-token-client، التي
تُولّد الإثباتات المطلوبة وتُرتّب المعاملات نيابةً عنك. يوفر عميل JS
@solana-program/token-2022 منشئات التعليمات على المستوى المنخفض
(getConfidentialMintInstruction، getConfidentialBurnInstruction، وما
شابهها) دون أي مساعد رفيع المستوى لبناء الإثباتات، كما لا توجد أوامر CLI، لذا
فالأمثلة أدناه مخصصة لـ Rust فقط.
قم بتهيئة الامتداد عند إنشاء الـ mint، ثم أصدر واحرق وقم بمطابقة المعروض بمرور الوقت. يُصدر الإصدار مبلغاً مشفراً في الرصيد السري للمستلم؛ ويزيل الحرق مبلغاً مشفراً في حرق معلّق يُدمج لاحقاً في المعروض. كلاهما يُولّد إثباتات مثل التحويل السري.
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?;
قم بتدوير مفتاح تشفير المعروض باستخدام
confidential_transfer_rotate_supply_elgamal_pubkey (يجب أن يكون الحرق المعلّق
صفراً أولاً)، وقم بتحديث نص التشفير المقروء للمعروض باستخدام
confidential_transfer_update_decrypt_supply.
اعتبارات التشغيل والامتثال
- حضانة مفتاح المراجع. إذا قمت بتعيين مراجع، فإن المفتاح السري للمراجع يُعدّ مفتاح فك تشفير عالي القيمة. قم بتخزينه وتدويره بعناية، وحدد من داخل مؤسستك (أو أي جهة تنظيمية) من يحتفظ به.
- موقف الامتثال. يستمر فحص العناوين وتحليل رسم بيان الأطراف المقابلة في العمل لأن العناوين تبقى عامة. يعتمد المراقبة القائمة على المبالغ على مفتاح المراجع أو على الإفصاح الانتقائي من أصحاب الحسابات. حدد نهجك قبل الإطلاق.
- إعداد حاملي الرموز. يتطلب تكوين حساب سري توقيع المالك. لتزويد المستخدمين بحسابات بسلاسة، اطلب منهم تسجيل مفتاح ElGamal مرة واحدة واستخدام مسار السجل، الموضح في دليل التكامل.
- عدد المعاملات. يشمل التحويل السري حالياً عدة معاملات مترابطة لأن الإثباتات تتجاوز حد حجم المعاملة الحالي. يرفع تنسيق المعاملة v1 (المُطلق مع Agave v4.2) ذلك الحد، ومن المتوقع أن يسمح بمعاملة واحدة على السلسلة.
Is this page helpful?