Skip to main content
هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
Raydium لا تقبل منتات Token-2022 عشوائية. كل من CPMM و CLMM يعملان في وضع قائمة سماح صارم: فقط مجموعة صغيرة من الامتدادات تمر بشكل افتراضي؛ كل شيء آخر يُرفض عند إنشاء المجمع. يقبل كل برنامج منت فردي من خلال آلية واحدة — سجل منت مدار من قبل المسؤول (PDA). كلا البرنامجين كان لديهما أيضًا التفافات مشفرة في نقاط مختلفة؛ تم حذف كل تلك الآن. هذه الصفحة هي المرجع الشامل لما يتم فرضه وأين، مع إشارات إلى مصدر البرنامج.

دعم على مستوى البرنامج

فحوصات قائمة السماح تعيش في: لا يوجد فحص منت في وقت المبادلة على CPMM أو CLMM — البوابة تُطلق فقط عند إنشاء المجمع. بمجرد وجود مجمع، تثق المبادلات فقط بأن المنتات لم تتغير، وهو صحيح لأجزاء المنت غير القابلة للتغيير من حالة منت Token-2022.

تجميد NFT موضع CLMM للمُصدرين المقيدين

حسابات NFT الموضع تبقى غير مجمدة بشكل افتراضي. يجمد CLMM واحدًا فقط عندما يستخدم الموضع مسار V2 مفتوح و يظهر freeze_authority الحالي لمنت الخزان الواحد على الأقل في قائمة frozen_position_nft_authorities::IDS المشفرة. هذه القائمة هي ما حل محل كشف رمز Superstate السابق في CLMM، وتحمل نفس سلطة المُصدر التي طابقتها الاستدلالية القديمة. تعيين PDA المجمع كسلطة تجميد منت NFT الموضع ليس بحد ذاته تجميدًا. هذه قاعدة حراسة موضع، وليست قائمة سماح إنشاء مجمع:
  • يمكن أن يكون المجمع موجودًا بالفعل ويبقى قابلًا للمبادلة.
  • يستخدم منت NFT الموضع PDA مجمع CLMM كسلطة تجميد خاصة به؛ المُصدر الأساسي لا يتحكم في NFT الموضع.
  • OpenPositionV2 يغطي NFTs موضع SPL الكلاسيكي على أصول مجمع Token-2022. OpenPositionWithToken22Nft يغطي NFTs موضع Token-2022.
  • OpenPosition V1 لا يفحص منتات الخزان ولا يمكنه خدمة أصول Token-2022 المقيدة المستهدفة بالقائمة المرسلة.
  • المواضع الموجودة لم تتغير.
المواضع المجمدة تبقى قابلة للإدارة من قبل مالكها لكن لا يمكن نقلها. ClosePosition يذيب ويحرق بشكل ذري عندما يمرر العميل المجمع كأول حساب متبقي. انظر products/clmm/ticks-and-positions.

منتات اقتباس LaunchLab

منتا LaunchLab مقيدان بطرق مختلفة جدًا، والعدم التماثل سهل الفقدان.
  • منت الأساس — LaunchLab ينشئه. منت أساس Token-2022 يمكن الوصول إليه فقط من خلال initialize_with_token_2022، والبرنامج سيرفق فقط MetadataPointer و (اختياريًا) TransferFeeConfig. أي شيء آخر يعيد NoSupportExtension. لا يمكن توفير منت Token-2022 موجود مسبقًا كأساس على الإطلاق. عندما يتم إرفاق TransferFeeConfig، يكون transfer_fee_config_authority للمنت هو PDA سلطة الإطلاق حتى التخرج، بينما withdraw_withheld_authority هو transfer_fee_extension_auth المكون من المنصة من إنشاء المنت فصاعدًا — برنامج launchpad نفسه ليس لديه تعليمات سحب محتفظ به. انظر products/launchlab/platform-config.
  • منت الاقتباس — LaunchLab لا ينشئه ولا يفحصه. CreateConfig يقبل حساب المنت كما هو، لذا لا يوجد ما يعادل is_supported_mint على جانب الاقتباس. البوابة الوحيدة هي المنتات التي يختار المسؤول ربطها بـ GlobalConfig.
هذا يجعل ربط منت اقتباس Token-2022 إجراءً عالي الثقة، للسبب نفسه تسجيل منت أدناه: منت اقتباس TransferHook سيشغل خطافه على كل عملية شراء وبيع ومطالبة رسوم في كل مجمع مقتبس فيه، ومنت اقتباس PermanentDelegate سيسمح للمندوب بمسح خزانات الاقتباس لتلك المجمعات. لا يتم حظر أي منهما من قبل البرنامج. ما يتعامل معه LaunchLab بشكل صحيح بمجرد ربط منت اقتباس:
  • خزان الاقتباس، وكلا خزاني الرسوم، وحساب رمز مستقبل رسوم المشاركة يتم إنشاؤها على برنامج منت الاقتباس الخاص به.
  • TransferFeeConfig على جانب الاقتباس يتم تسعيره في جميع تعليمات التجارة الأربعة، والحد الأدنى للانزلاق يتم فحصه مقابل المبلغ الصافي للدافع بدلاً من حركة الخزان الإجمالية. انظر products/launchlab/instructions.
  • PoolState.token_program_flag يسجل برامج كلا المنتات — bit0 لمنت الأساس، bit1 لمنت الاقتباس. فك تشفير حسب البت؛ البايت ليس قيمة منطقية. انظر products/launchlab/accounts.
تعليمات Initialize المهجورة لا تزال تأخذ برنامج اقتباس وراثي فقط، لذا يمكن الوصول إلى إعدادات مع منت اقتباس Token-2022 فقط من خلال InitializeV2 و InitializeWithToken2022.

قائمة سماح امتدادات CPMM و CLMM

بعد الاختصارات القصيرة المغطاة أدناه، يكرر البرنامج امتدادات المنت ويرفض المنت إذا كان يحمل أي امتداد بخلاف هذه الخمسة: أي شيء ليس في هذه القائمة — TransferHook، NonTransferable، ConfidentialTransferMint، PermanentDelegate، MintCloseAuthority، DefaultAccountState، GroupPointer، GroupMemberPointer، MemberPointer، Pausable، إلخ. — يسبب is_supported_mint للعودة false وإنشاء المجمع للعودة. الأسطر ذات الصلة (CPMM، نفس الشكل في CLMM):
— cp-swap/src/utils/token.rs

مسارات الالتفاف

منت Token-2022 لا يناسب قائمة السماح يمكن قبوله بشكل أساسي، من خلال آلية واحدة في كل برنامج. كان لكلا البرنامجين أيضًا التفافات مشفرة في الماضي؛ لا يبقى أي منها. is_supported_mint الآن بايت مقابل بايت نفس الدالة في كلا البرنامجين: منتات SPL Token الوراثية تمر، منت مع سجل PDA يمر، وكل شيء آخر يجب أن يحمل فقط امتدادات مسموحة.

الالتفاف الوحيد: سجل المنت لكل منت

يستشير كلا البرنامجين PDA SupportMintAssociated في البذرة [b"support_mint", mint]. إذا كان هذا PDA موجودًا للمنت، يتم قبول المنت بغض النظر عن مجموعة امتداده. لكل برنامج نسخته الخاصة من PDA (يشتقان تحت معرفات برنامج مختلفة)، زوجه الخاص من CreateSupportMintAssociated / CloseSupportMintAssociated، وسلطته المخصصة الخاصة به إلى جانب المسؤول المشترك: المفاتيح الأربعة (CPMM و CLMM × mainnet و devnet) مدرجة تحت Support-mint registry authorities. في كلا البرنامجين تقبل التعليمات إما crate::admin::ID أو سلطة البرنامج المخصصة، وتتطلب أن يكون المنت مملوكًا بواسطة Token-2022. التأثير: يمكن اختيار منت Token-2022 محدد لإنشاء المجمع بدون ترقية برنامج — وهذا هو السبب في أن القوائم المشفرة يمكن أن تذهب. يستشير كل برنامج السجل من كل مسار إنشاء مجمع لديه: CPMM من Initialize و InitializeWithPermission (الأخير هو ما تستخدمه تخرجات LaunchLab، لذا يتخرج منت مسجل وكذلك ينشئ)، CLMM من CreatePool، CreateCustomizablePool و CreateCustomizablePoolV2.

الآليات المحذوفة

كلا الآليتين المشفّرتين قد حُذفتا من البرامج المنشورة. يتم توثيقهما هنا فقط لأن التكاملات المكتوبة ضد السلوك الأقدم قد تفترض وجودهما.

MINT_WHITELIST الثابتة — محذوفة

كانت مصفوفة ثابتة من عناوين mint بصيغة base58 تُستخدم لتجاوز is_supported_mint قبل تكرار الامتدادات. احتفظت CLMM بستة عناوين وحُذفت في 2026-07-24؛ احتفظت CPMM بأول أربعة من نفس المجموعة وحُذفت في ترقية 2026-09-09. تستمر مجموعة موجودة بالفعل لأحد هذه الـ mints في التداول — فحص mint يعمل فقط عند إنشاء المجموعة. إنشاء مجموعة جديدة لأحدها يتطلب الآن PDA سجل بدلاً من ذلك.

كشف شكل سلطة Superstate — محذوف

حددت CLMM لفترة وجيزة الأصول المرمزة من Superstate من خلال شكل سلطتها بدلاً من العنوان: mint من Token-2022 حيث كانت freeze_authority و permanent delegate كلاهما يساوي superstate_allowlist::ID، مع تعيين DefaultAccountState إلى Frozen، تم قبوله. كان اختيارياً، لذا كان أي mint مستقبلي بنفس الشكل سيتم قبوله تلقائياً. تم حذفه في 2026-07-31، جنباً إلى جنب مع وحدة superstate_allowlist. ما حل محله أضيق وخدم غرضاً مختلفاً: frozen_position_nft_authorities::IDS، الذي لا يقبل أي شيء — بل يقرر ما إذا كان position NFT مجمداً، وموصوف أعلاه. سلطة المُصدر الوحيدة التي طابقها الاختيار القديم هي الإدخال الوحيد في تلك القائمة.

ما لا تتنازل عنه الآليات

تتجاوز الآليات قائمة السماح بالامتدادات، لكن البرنامج لا يزال يفرض:
  • يتم امتلاك mint بواسطة Token أو Token-2022. يتم رفض برنامج token مخصص في المنبع.
  • يتم إنشاء مخزن المجموعة بامتدادات ATA الصحيحة لمجموعات Token-2022 (ImmutableOwner، إلخ).
  • تمر جميع التحويلات عبر transfer_checked — تصل mints التي تحمل رسوماً إلى المبلغ الصحيح في المخزن.
لا يحصل mint مدرج في القائمة البيضاء أو مسجل في PDA على فحص وقت المبادلة إذا أضاف لاحقاً TransferHook؛ ستعمل الخطاف على كل تحويل وقد تعطل المبادلات. لذلك فإن تسجيل mint هو إجراء عالي الثقة.

دلالات “محظور”

عندما تُرجع is_supported_mint قيمة false، ينعكس إنشاء المجموعة مع ErrorCode::NotSupportMint (CPMM) / ErrorCode::NotSupportMint (CLMM). انظر reference/error-codes للأكواد الرقمية. لا يمكن للمجموعات الموجودة أن تفشل هذا الفحص بأثر رجعي — البوابة تعمل فقط عند الإنشاء. امتدادات mint غير قابلة للتغيير للفئات التي ترفضها Raydium (transfer hook، non-transferable، لا يمكن إضافة confidential transfer بعد الإنشاء)، لذا فإن الفحص الثابت كافٍ.

لماذا يتم استبعاد كل امتداد

  • TransferHook — يستدعي برنامجاً مخصصاً على كل تحويل، مع استهلاك CU تعسفي، وشروط فشل تعسفية، والقدرة على إعادة الدخول إلى البرنامج الذي يستدعيه. لا توجد صندوق رمل آمن. تحتفظ بعض DEXes بقوائم سماح الخطاف؛ Raydium لا تفعل.
  • NonTransferable — Transfer يفشل دائماً. لا يمكن للمجموعة أن تأخذ الحراسة.
  • ConfidentialTransfer — مبالغ التحويل مشفرة؛ لا يمكن للمنحنى تسعير المبادلة.
  • PermanentDelegate — يمكن لحامل المفوض أن يكتسح أي حساب token، بما في ذلك مخزن المجموعة. مقبول فقط بتسجيل mint، وهي الطريقة التي يتم بها إدراج مُصدر موثوق (مثل stablecoin منظم) حالة تلو الأخرى.
  • MintCloseAuthority — يمكن إغلاق mint؛ تصبح المجموعات الموجودة غير قابلة للاستخدام. محظور بشكل افتراضي.
  • DefaultAccountState (Frozen) — ستصل ATAs للمجموعة إلى حالة Frozen وتتطلب إذابة لكل حساب. مقبول فقط بتسجيل mint، الذي يفترض أن المُصدر يذيب الحسابات المؤسسية عند التسجيل.
  • Group/Member pointers — ليست ضارة بنشاط، لكن لم تتم مراجعتها. محظور بشكل افتراضي للحفاظ على السطح ضيقاً.

محاسبة رسوم التحويل

بالنسبة للـ mints التي تحمل TransferFeeConfig، تنقل كل مبادلة وإيداع وسحب مبلغاً أقل من المبلغ الاسمي. يتم تضمين رقمين منفصلين، والـ SDK يفصل بينهما:
  • رسوم المجموعة (LP + protocol + fund + creator) تأتي من المنحنى. raydium.cpmm.computeSwapAmount({ ... }) تُرجعها كـ fee، جنباً إلى جنب مع amountIn، amountOut، minAmountOut، executionPrice، priceImpact والـ swapResult الخام.
  • رسوم تحويل Token-2022 تأتي من mint، وليس من المجموعة. يتم حسابها بواسطة مساعدات getTransferAmountFee في @raydium-io/raydium-sdk-v2، التي تُرجع GetTransferAmountFee:
الإيداع والسحب يسطحانها مباشرة: computePairAmount تُرجع inputAmountFee و anotherAmount كقيم GetTransferAmountFee. واجهة مستخدم صحيحة تعرض:
  • مبلغ الإدخال زائد رسوم التحويل الخاصة به كـ “أنت ترسل”
  • مبلغ الإخراج ناقص رسوم التحويل الخاصة به كـ “أنت تستقبل”
  • رسوم المجموعة كسطر منفصل — إنها ليست رسوم Token-2022
واجهة مستخدم ساذجة تعرض فقط amountIn → amountOut تقلل من التكاليف. مرّر epochInfo من المجموعة إلى هذه المساعدات بدلاً من تخزينها مؤقتاً؛ الـ epoch هو ما يختار بين older و newer fee config للـ mint.

حد maximumFee

رسوم تحويل Token-2022 مقيدة لكل تحويل. بالنسبة لـ mint بنسبة 1% مع حد 10,000 token، يدفع تحويل 100,000,000 token فقط 10,000 في الرسوم. يطبق computeSwapAmount الخاص بـ SDK الحد؛ يجب على المتصلين المباشرين بالبرنامج تكراره.

انتقال الـ Epoch

يمكن لسلطة mint جدولة تغيير معدل الرسوم الذي ينشط في الـ epoch التالي. أثناء نافذة الانتقال، تعيش تكوينات اثنتان (older، newer) على mint في نفس الوقت و TransferChecked تختار حسب الـ epoch الحالي. كل من CPMM SwapV2 و CLMM SwapV2 تمرران حساب mint الكامل في accounts، لذا يقرأ البرنامج التكوين الصحيح بدون بحث إضافي. إذا اقتبست أكثر من epoch واحد مقدماً عبر Trade API أو SDK، قد تختلف الرسوم المنفذة عن الرسوم المقتبسة — محدودة بـ maximum_fee_basis_points للتكوين الأقدم.

الفائدة والـ ScaledUiAmount

تحتفظ المجموعة بالمبلغ الأساسي؛ “مبلغ الـ UI” هو المبلغ الأساسي مضروباً في عامل مقياس يعتمد على الوقت أو يحدده المسؤول. تعمل رياضيات المبادلة على المبلغ الأساسي:
يحول SDK تلقائياً. يجب على قارئي RPC المباشرين معاملة pool.token0Vault.amount كمبلغ أساسي.

تعريف “مجموعة Token-2022”

تكون المجموعة مجموعة Token-2022 إذا كان أي من mint له programId == TokenzQdB.... تسطح الـ API هذا:
استخدم programId للتوزيع، و hasTransferFee لسطح تحذير الـ UI.

مساعدات SDK

أخطاء التكامل الشائعة

  • التحقق المسبق من معرّف البرنامج فقط. يمكن أن يكون mint من Token-2022 و غير مدعوم. امشِ عبر قائمة الامتدادات مقابل قائمة السماح، وتحقق من PDA سجل mint، قبل السماح بإنشاء المجموعة.
  • الثقة في اقتباس SDK عندما لا يتم قبول mint على الإطلاق. لا ترفض API الاقتباس — إنشاء المجموعة هو ما ينعكس. أكّد دلالات is_supported_mint خارج السلسلة قبل فتح إنشاء المجموعة في واجهة المستخدم الخاصة بك.
  • الاقتباس بدون خصم رسوم التحويل. mint برسوم تحويل 1% على كلا الجانبين من مجموعة CPMM بنسبة 0.25% لها رسوم فعالة حول 2.25%، وليس 0.25%. استخدم اقتباس SDK أو اقتباس Trade API — لا تحسب الرسوم يدوياً من مستوى رسوم المجموعة وحده.
  • استدعاء تعليمات Swap القديمة على مجموعة Token-2022. Swap سابقة لـ Token-2022. استخدم SwapV2 كلما كان أي من mint من Token-2022.
  • إدراج تلقائي لـ mints جديدة من Token-2022. يجب على المحافظ والمجمعات التحقق من TransferHook و NonTransferable قبل سطح mint للمستخدمين؛ كلاهما معادٍ لـ Raydium.

العمل المستقبلي

عناصر خارطة الطريق لنظام Solana البيئي والبروتوكول التي ستغير هذه المصفوفة:
  • برامج transfer-hook مدرجة في قائمة السماح على مستوى Solana (اتفاقية النظام البيئي تتطور).
  • AMMs متوافقة مع confidential-transfer (مرحلة البحث).
  • سجل CPMM أوسع لكل mint (التكافؤ مع CLMM).
  • مسار قراءة عام للسجل، بحيث يمكن لواجهة المستخدم أن تخبر “غير مدعوم” من “غير مدعوم لكن مسجل” بدون اشتقاق PDA بنفسها.
سيتم تحديث هذه الصفحة عند هبوط أي منها.

المؤشرات

المصادر:
  • raydium-cp-swap/programs/cp-swap/src/utils/token.rs — is_supported_mint, support_mint_associated_is_initialized.
  • raydium-clmm/programs/amm/src/util/token.rs — is_supported_mint, support_mint_associated_is_initialized, frozen_position_nft_authorities, position_nft_must_freeze.
  • raydium-clmm/programs/amm/src/instructions/admin/create_support_mint_associated.rs — تعليمات السجل لكل mint.
  • raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs — إنشاء base-mint من LaunchLab Token-2022.
  • raydium-launchpad/programs/launchpad/src/instructions/admin/create_config.rs — ربط quote-mint من LaunchLab (بدون فحص امتداد).