الانتقال إلى المحتوى الرئيسي

Documentation Index

Fetch the complete documentation index at: https://docs.raydium.io/llms.txt

Use this file to discover all available pages before exploring further.

هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
Raydium لا تقبل عملات Token-2022 عشوائية. كل من CPMM و CLMM يعملان في وضع قائمة سماح صارم: فقط مجموعة صغيرة من الامتدادات تمر بشكل افتراضي؛ كل شيء آخر مرفوض عند إنشاء Pool. يتم قبول عدد قليل من العملات الموثوقة بواسطة عناوين مشفرة بقوة؛ يدعم CLMM بشكل إضافي سجل إداري لكل عملة وكشف رموز Superstate في وقت التشغيل. هذه الصفحة هي المرجع الوحيد لما يتم فرضه وأين، مع إشارات الملفات والأسطر إلى مصدر البرنامج.

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

البرنامجعملات Token-2022 الأساسية والمقتبسة؟الوضع
CPMMنعم — مبوبقائمة سماح امتدادات صارمة + 4 عملات قائمة بيضاء ثابتة.
CLMMنعم — مبوبقائمة سماح امتدادات صارمة + 6 عملات قائمة بيضاء ثابتة + سجل إداري لكل عملة + كشف Superstate.
AMM v4لاالبرنامج يسبق Token-2022؛ يجب أن تكون كلا العملتين من Token الكلاسيكي.
Stable AMMلانفس القيود مثل AMM v4.
Farm v6نعم، جزئيًايمكن أن تكون عملة المكافأة Token-2022 (تخضع لنفس قائمة السماح عندما تغلف Farm أ LP من CPMM/CLMM)؛ عملات LP للرهن من قبل المستخدم ترث من Pool المغلفة.
LaunchLabنعم، مُدارة بواسطة البرنامجيمكن أن تكون العملة الأساسية Token-2022، ولكن فقط عبر التعليمات المخصصة initialize_with_token_2022؛ ينشئ البرنامج نفسه العملة باستخدام MetadataPointer (دائمًا) و TransferFeeConfig اختياريًا (معدل ≤ 5%). لا يمكن استخدام عملات Token-2022 الموجودة مسبقًا مع امتدادات عشوائية كقاعدة.
Burn & Earnمرايا برنامج Poolيرث بوابة CPMM / CLMM.
تعيش فحوصات قائمة السماح في: لا توجد أي فحص عملة في وقت المبادلة على CPMM أو CLMM — البوابة تُطلق فقط عند إنشاء Pool. بمجرد وجود Pool، تثق المبادلات بأن العملات لم تتغير، وهذا صحيح للأجزاء غير القابلة للتغيير من حالة عملة Token-2022.

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

بعد اختصارات قائمة البيضاء الثابتة (مغطاة أدناه)، يكرر البرنامج امتدادات العملة ورفض العملة إذا كانت تحمل أي امتداد بخلاف هذه الخمسة:
الامتدادالسبب المسموح به
TransferFeeConfigحسابات Pool تطرح الرسوم الواردة؛ يتعامل برنامج Token-2022 مع الرسوم الصادرة. انظر algorithms/token-2022-transfer-fees.
MetadataPointerتزييني — يشير إلى بيانات وصفية على السلسلة.
TokenMetadataتزييني — بيانات وصفية مضمنة.
InterestBearingConfigPool يرى مبلغ رأس المال؛ مضاعف UI تزييني فقط والرصيد الأساسي محفوظ.
ScaledUiAmountنفس شكل الفائدة — عامل القياس ينطبق على عرض UI فقط.
أي شيء ليس في هذه القائمة — TransferHook، NonTransferable، ConfidentialTransferMint، PermanentDelegate، MintCloseAuthority، DefaultAccountState، GroupPointer، GroupMemberPointer، MemberPointer، Pausable، إلخ. — يتسبب في عودة is_supported_mint بـ false وانعكاس إنشاء Pool. الأسطر الصلة (CPMM، شكل متطابق في CLMM):
for e in extensions {
    if e != ExtensionType::TransferFeeConfig
        && e != ExtensionType::MetadataPointer
        && e != ExtensionType::TokenMetadata
        && e != ExtensionType::InterestBearingConfig
        && e != ExtensionType::ScaledUiAmount
    {
        return Ok(false);
    }
}
Ok(true)
cp-swap/src/utils/token.rs:190–200

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

يمكن قبول عملة Token-2022 التي لا تناسب قائمة السماح عبر أحد مسارات الالتفاف الثلاثة الصريحة. يتم محاولتها بالترتيب، قبل تشغيل تكرار الامتداد.

1. قائمة العملات البيضاء الثابتة

مصفوفة MINT_WHITELIST ثابتة من سلاسل base58 مشفرة في كل برنامج. إذا طابقت عنوان العملة، تعود الدالة true فورًا ولا يتم إجراء فحص الامتداد.
البرنامجالعملات المدرجة بقائمة بيضاء
CPMMHVbpJAQGNpkgBaYBZQBR1t7yFdvaYVp2vCQQfKKEN4tM، Crn4x1Y2HUKko7ox2EZMT6N2t2ZyH7eKtwkBGVnhEq1g، FrBfWJ4qE5sCzKm3k3JaAtqZcXUh4LvJygDeketsrsH4، 2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo
CLMMنفس الأربعة، بالإضافة إلى DAUcJBg4jSpVoEzASxYzdqHMUN8vuTpQyG2TvDcCHfZg، AUSD1jCcCyPLybk1YnvPWsHQSrZ46dxwoMniN4N2UEB9
يتم حفر هذه العناوين في البرنامج؛ تحديث القائمة يتطلب ترقية برنامج عبر multisig ترقية 3/4.

2. سجل لكل عملة — CLMM فقط

يستشير CLMM بالإضافة PDA SupportMintAssociated في البذرة [b"support_mint", mint]. إذا كان هذا PDA موجودًا للعملة، يتم قبولها بغض النظر عن مجموعة الامتدادات الخاصة بها. يتم إنشاء PDA بواسطة CreateSupportMintAssociated (admin/create_support_mint_associated.rs). التعليمات مبوبة لموقعين:
  • crate::admin::ID — سلطة الإدارة القياسية لـ Raydium.
  • crate::create_support_mint_associated_owner::ID — سلطة مخصصة لهذا الغرض: RayVyjyJQz9vAi126A4sGexKnSU1XeZaHTRcM1mZMPY (mainnet)، rayf3nEbb3bnfN6RDGFpqPbjc5uUa3tRUzu6UVYrRx5 (devnet).
التأثير: يمكن لفريق CLMM اختيار عملة Token-2022 محددة لإنشاء Pool دون ترقية برنامج. لا يوجد CPMM معادل — قائمة السماح الخاصة به مشفرة بصرامة في المصدر.

3. كشف Superstate — CLMM فقط

يحتوي CLMM على مسار ثالث محدد لأصول Superstate المُرمزة، التي تستخدم امتداد ScaledUiConfig الذي إصدار spl-token-2022 المرتبط ببرنامج CLMM لا يمكنه فك تعبئته. بدلاً من ترقية المتكل، يكتشف CLMM رموز Superstate من خلال شكل سلطتها:
superstate_allowlist::ID == freeze_authority
    && *mint_account_info.owner == spl_token_2022::ID
    && default_account_state_freeze
    && maybe_permanent_delegate
raydium-clmm/programs/amm/src/util/token.rs:485 عملة تمر هذا الفرع إذا كان جميع الأربعة صحيحًا:
  • برنامجها المالك هو برنامج Token-2022.
  • سلطة التجميد الخاصة بها تساوي superstate_allowlist::ID. Mainnet: 2Yq4T3mPNfjtEyTxSbRjRKqLf1pwbTasuCQrWe6QpM7x. Devnet: 3TRuL3MFvzHaUfQAb6EsSAbQhWdhmYrKxEiViVkdQfXu.
  • امتداد DefaultAccountState الخاص بها معيّن على Frozen.
  • المفوض الدائم أيضًا superstate_allowlist::ID.
هذا حدس، وليس سجل — أي عملة مستقبلية Superstate يصدرها مع نفس شكل السلطة ستكون مقبولة تلقائيًا.

ما لا تتنازل عنه مسارات الالتفاف

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

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

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

لماذا يتم استثناء كل امتداد

  • TransferHook — يستدعي برنامج مخصص على كل تحويل، مع استهلاك CU عشوائي، شروط فشل عشوائية، والقدرة على إعادة الدخول إلى البرنامج الاستدعاء. لا يوجد sandbox آمن. بعض DEXes تحتفظ بقوائم سماح الخطاف؛ Raydium لا.
  • NonTransferableTransfer يفشل دائمًا. لا يمكن لـ Pool أخذ الحضانة.
  • ConfidentialTransfer — مبالغ التحويل مشفرة؛ لا يمكن للمنحنى تسعير المبادلة.
  • PermanentDelegate — حامل المفوض يمكنه مسح أي حساب رمز، بما فيه خزينة Pool. مسموح فقط عبر قائمة البيضاء الثابتة للمصدرين الموثوقين (مثل العملات المستقرة المنظمة).
  • MintCloseAuthority — يمكن إغلاق العملة؛ تصبح الـ Pools الموجودة غير قابلة للاستخدام. ممنوعة افتراضيًا.
  • DefaultAccountState (Frozen) — سيهبط ATA من Pool في حالة Frozen ويتطلب إذابة لكل حساب. مسموح فقط عبر كشف Superstate، الذي يفترض أن المصدر يذيب الحسابات المؤسسية عند التسجيل.
  • مؤشرات Group/Member — ليست ضارة بنشاط، لكن لم تُراجع. ممنوعة افتراضيًا للحفاظ على السطح ضيقًا.

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

بالنسبة للعملات التي تحمل TransferFeeConfig، كل مبادلة وإيداع وسحب ينقل أقل من المبلغ الاسمي. سطح SDK كلا نصفي الحساب:
const { amountIn, amountOut, feeAmount, token2022FeeIn, token2022FeeOut } =
  await raydium.cpmm.computeSwapAmount({ ... });
يظهر UI صحيح:
  • amountIn + token2022FeeIn كـ “ترسل”
  • amountOut - token2022FeeOut كـ “تستقبل”
  • feeAmount كرسم Pool (LP + بروتوكول)، وهو منفصل عن رسم نقل Token-2022
UI ساذج يظهر فقط amountIn → amountOut يقلل من التكاليف.

حد maximumFee

رسوم نقل Token-2022 محدودة لكل نقل. بالنسبة لعملة 1٪ برسم حد 10,000، نقل 100,000,000 رمز يدفع فقط 10,000 كرسم. يطبق SDK computeSwapAmount الحد؛ يجب على مستدعي البرنامج المباشرة تكرار ذلك.

انتقال الحقبة

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

الفائدة والمبلغ المُقاس للـ UI

يحتفظ Pool برأس المال؛ “مبلغ UI” هو رأس المال مضروب في عامل قياس يعتمد على الوقت أو يعينه الإدارة. حسابات المبادلة تعمل على رأس المال:
principal_in = ui_amount_in / ui_multiplier(now)
يحول SDK تلقائيًا. يجب على قراء RPC المباشرين معاملة pool.token0Vault.amount كرأس مال.

تعريف “Pool Token-2022”

Pool هو Pool Token-2022 إذا كانت أي عملة لديها programId == TokenzQdB.... يسطح API هذا:
GET /pools/info/ids?ids=<POOL_ID>
{
  "data": [{
    "mintA": { "programId": "TokenzQdB...", "hasTransferFee": true, ... },
    "mintB": { "programId": "Tokenkeg...", ... }
  }]
}
استخدم programId للـ dispatch، و hasTransferFee لعرض تحذير UI.

مساعدات SDK

import { Raydium, TOKEN_2022_PROGRAM_ID } from "@raydium-io/raydium-sdk-v2";
import { ExtensionType, getExtensionTypes, unpackMint } from "@solana/spl-token";

const raydium = await Raydium.load({ owner, connection });

const acct = await connection.getAccountInfo(mintPubkey);
if (!acct) throw new Error("mint not found");
const mint = unpackMint(mintPubkey, acct, acct.owner);

if (acct.owner.equals(TOKEN_2022_PROGRAM_ID)) {
  const extensions = getExtensionTypes(mint.tlvData);
  const accepted = new Set([
    ExtensionType.TransferFeeConfig,
    ExtensionType.MetadataPointer,
    ExtensionType.TokenMetadata,
    ExtensionType.InterestBearingConfig,
    ExtensionType.ScaledUiAmount,
  ]);
  const rejecting = extensions.filter(e => !accepted.has(e));
  if (rejecting.length) {
    console.warn("Pool creation will revert unless this mint is whitelisted:", rejecting);
  }
}

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

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

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

عناصر خريطة الطريق لنظام Solana والبروتوكول التي ستغير هذه المصفوفة:
  • برامج transfer-hook مدرجة بقائمة السماح على مستوى Solana (اتفاقية النظام البيئي تتطور).
  • AMMs متوافقة مع التحويل السري (مرحلة البحث).
  • سجل CPMM أوسع لكل عملة (تكافؤ مع CLMM).
  • ترقية المتكل بحيث فك تشفير ScaledUiConfig الخاص بـ CLMM يعمل بدون حدس Superstate.
ستُحدّث هذه الصفحة عند هبوط أي منها.

المؤشرات

المصادر:
  • raydium-cp-swap/programs/cp-swap/src/utils/token.rsMINT_WHITELIST، is_supported_mint.
  • raydium-clmm/programs/amm/src/util/token.rsMINT_WHITELIST، superstate_allowlist، is_superstate_token، is_supported_mint.
  • raydium-clmm/programs/amm/src/instructions/admin/create_support_mint_associated.rs — تعليمات سجل لكل عملة.
  • raydium-launchpad/programs/launchpad/src/instructions/initialize_with_token_2022.rs — إنشاء قاعدة عملة Token-2022 للـ LaunchLab.