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

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 مستقلة في قواعد الأكواد الخاصة بها، لكنها صُممت وفقًا لمجموعة من الاتفاقيات المشتركة. هذه الصفحة هي المرجع الموثوق لتلك الاتفاقيات. تصف فصول المنتجات الفردية كيفية تطبيق الاتفاقيات في حساباتها؛ أما هذه الصفحة فتصف الاتفاقيات ذاتها.

ما معنى “مشترك” هنا

يوجد ثلاثة أنواع من التقاسم في قاعدة الأكواد:
  • تقاسم الاتفاقيات. كل برنامج يستخدم نفس نمط اشتقاق PDA، نفس شكل تقسيم الرسوم، نفس فكرة حساب الملاحظة — لكن كل برنامج ينفذها في برنامجه الخاص مع بذوره الخاصة.
  • تقاسم الحسابات. قلة من الحسابات هي حرفيًا نفس السجل عبر عدد كبير من المجمّعات (PDA السلطة الشامل في CPMM، حسابات AmmConfig).
  • التقاسم خارج السلسلة. واجهة برمجية REST واحدة وواحدة TypeScript SDK توفر جميع البرامج الأربعة. يتفاعل المدمجون مع مضيف HTTP واحد وحزمة NPM واحدة بغض النظر عن البرنامج الذي سينتهي بهم الحال في استدعاؤه.
الأوليات الخمس أدناه تغطي كل ما يعبر حدود البرنامج.

1. سلطة PDAs

لكل برنامج Raydium بالضبط PDA واحد يمتلك خزائن الرموز الخاصة به. لا يحتفظ المستخدمون أبدًا بسلطة الخزانة مباشرة — PDA السلطة هو الموقّع الوحيد الذي يمكنه نقل الأموال للخارج، وهو يوقّع فقط عندما تخبره تعليمات برنامج صحيحة بالقيام بذلك. النمط متطابق عبر المنتجات؛ البذور تختلف:
البرنامجبذور PDA للسلطةملاحظات
AMM v4[poolId]سلطة لكل مجمّع. نفس الشكل مثل تصميم v4 لكل مجمّع.
CPMM[b"vault_and_lp_mint_auth_seed"]PDA واحد مشترك لجميع مجمّعات CPMM. بدون بذرة خاصة بالمجمّع.
CLMM[b"pool_vault_and_lp_mint_auth_seed"]PDA واحد مشترك عبر جميع مجمّعات CLMM.
Farm v3 / v5 / v6[farmId]لكل مزرعة. يمتلك PDA خزائن الرهن والمكافآت لتلك المزرعة.
LaunchLab[b"vault_auth", launchId]لكل إطلاق. يمتلك خزائن القاعدة والعرض قبل التخرج.
عدة أشياء تتبع من هذا:
  • بالنسبة لـ CPMM و CLMM، فإن PDA السلطة هو حساب عام — كل مجمّع من هذا النوع يستخدمه. إذا كنت تقوم بـ CPI إلى CPMM فأنت تحتاجه مرة واحدة، وليس لكل مجمّع.
  • بالنسبة لسلطات لكل مجمّع/لكل مزرعة، تشتق PDA من معرّف المجمّع/المزرعة. يفعل SDK هذا في getPoolKeys / getFarmKeys؛ إذا كنت تدمج مباشرة، فأنت تشتق مع findProgramAddressSync.
  • لا يمكن تغيير ملكية الخزانة. بمجرد إنشاء حساب رمز مع PDA السلطة كمالك، فقط هذا PDA — المستدعى من قبل البرنامج — يمكنه نقل الأموال للخارج. لا يوجد تجاوز إداري.
للبذور الدقيقة وتخطيطات ATA لكل برنامج، انظر products/cpmm/accounts، products/clmm/accounts، products/amm-v4/accounts، products/farm-staking/accounts، products/launchlab/accounts.

2. حسابات المسؤول والإعدادات

يتقاسم CPMM و CLMM نمط حساب الإعدادات يسمى AmmConfig: حساب عام صغير، مفهرس بـ u16، يحمل معدلات الرسوم والوجهات الإدارية التي تنطبق على طبقة رسوم كاملة. تربط المجمّعات نفسها بإعداد عند الإنشاء ولا تعيد الربط أبدًا.
// CPMM AmmConfig (مختصر — نسخة CLMM متشابهة هيكليًا)
pub struct AmmConfig {
    pub bump: u8,
    pub disable_create_pool: bool,        // منع إنشاء مجمّع جديد في هذه الطبقة
    pub index: u16,                       // فهرس الطبقة
    pub trade_fee_rate: u64,              // جزء من التجارة الذي يذهب للرسوم
    pub protocol_fee_rate: u64,           // جزء من رسم التجارة للبروتوكول
    pub fund_fee_rate: u64,               // جزء من رسم التجارة للصندوق
    pub create_pool_fee: u64,             // رسم إنشاء مجمّع واحد لمرة واحدة
    pub protocol_owner: Pubkey,           // الموقّع لـ CollectProtocolFee
    pub fund_owner: Pubkey,               // الموقّع لـ CollectFundFee
    pub padding: [u64; 16],
}
قواعد الطريق:
  • طبقات الرسوم عامة. عندما يقول مجمّع “هذا مجمّع 0.25%”، فهذا يعني أنه يربط نفسه بـ AmmConfig الذي كان trade_fee_rate به 0.25% في وقت الإنشاء. لا يوجد تجاوز معدل لكل مجمّع.
  • يمكن تغيير الإعداد لكن المجمّعات لا تتبعه. إذا قام سلطة الإعدادات بتعديل AmmConfig، فكل مجمّع موجود مرتبط بهذا الإعداد يختار المعدل الجديد فورًا. هذه ميزة، وليست خلل؛ هذه هي الطريقة التي تنتشر بها التغييرات الاقتصادية على مستوى البروتوكول دون الهجرات لكل مجمّع.
  • disable_create_pool هو رافعة الإهمال. عندما تكون طبقة رسوم قديمة، تعيين متعدد التوقيع بروتوكول هذه العلامة — المجمّعات الموجودة تبقى تعمل لكن لا يمكن لمجمّعات جديدة اختيار الطبقة.
  • protocol_owner / fund_owner هم الموقّعون لاستدعاءات جمع الرسوم. تعيينهم إلى متعدد التوقيع هو ما يحد من سحب الرسوم. إنهم ليسوا عناوين الوجهات للرسوم نفسها؛ ذلك هو protocol_fee_destination / fund_fee_destination على نفس الحساب.
ليس لدى AMM v4 AmmConfig — معاملات الرسوم الخاصة به موجودة لكل مجمّع، مبرمجة بشكل ثابت عند الإنشاء. Farm و LaunchLab لديهما نظائرهما الخاصة (FarmConfig، LaunchConfig) المغطاة في فصولهما الخاصة. جدول شامل لمن يمكنه تغيير ماذا موجود في security/admin-and-multisig. تقسيمات الرسوم الحالية التي تواجه المستخدم موجودة في ray/protocol-fees.

3. تقسيم رسم البروتوكول/الصندوق/المُنشئ

كل رسم مبادلة CPMM و CLMM ينقسم عبر ما يصل إلى أربع وجهات في الطريق:
                         إجمالي رسم المبادلة

              ┌───────────────┼───────────────┬──────────────┐
              ▼               ▼               ▼              ▼
        جانب مجمّع LP     خزينة البروتوكول   متعدد التوقيع   المُنشئ
        (يزيد k)         البروتوكول         الصندوق         (مجمّعات LaunchLab)
ميكانيكيًا:
  1. رسم التجارة يتراكم في المجمّع. يتم إزالة الرسم من جانب الإدخال للمبادلة والمبلغ بعد الرسم هو ما تراه الرياضيات ذات المنتج الثابت. هذا ما يعنيه “LP يكسب الرسم” — k يرتفع وكذلك قيمة الرمز الضمنية لكل LP.
  2. أجزاء البروتوكول/الصندوق/المُنشئ يتم خصمها من هذا التراكم من جانب LP إلى حسابات مقابلة لكل مجمّع. تبقى في حالة المجمّع (protocol_fees_token{0,1}، fund_fees_token{0,1}، وما إلى ذلك) حتى يستدعي شخص ما CollectProtocolFee / CollectFundFee / CollectCreatorFee. لا تترك خزائن المجمّع حتى ذلك الحين؛ من منظور المبادلة فهي لا تزال “في المجمّع”.
  3. الجمع ينقلها للخارج. الموقّع المعني (protocol_owner / fund_owner مفاتيح على AmmConfig، أو منشئ الإطلاق لمجمّعات LaunchLab) يستدعي تعليمة الجمع والبرنامج ينقل من خزانة المجمّع إلى ATA للوجهة.
بعض الملاحظات الحاملة للحمل:
  • نسب التقسيم هي من رسم التجارة، وليس من التجارة. رسم تجارة 0.25% مع حصة بروتوكول 12% يعني أن البروتوكول يحصل على 0.25% × 12% = 0.03% من التجارة — ليس 12% من التجارة.
  • رسوم المُنشئ موجودة فقط على مجمّعات LaunchLab المتخرجة. المجمّعات العادية CPMM/CLMM لديها تقسيم بثلاث طرق (LP / بروتوكول / صندوق). LaunchLab يضيف فتحة رابعة موجهة إلى من أطلق الرمز، مكوّنة عند Initialize وغير قابلة للتغيير.
  • AMM v4 ينقسم بطريقتين فقط، مبرمجة بشكل ثابت لكل مجمّع: LP والبروتوكول. لا فتحة صندوق، لا فتحة منشئ.
  • الصندوق مقابل البروتوكول — كلاهما وجهات خزينة البروتوكول، لكن لديهما موقّعون مختلفون واستخدامات مقصودة مختلفة. protocol تاريخيًا يمول العمليات؛ fund هي خزينة المدى الأطول. التقسيم بين الاثنين هو في حد ذاته قابل للضبط.
المعدلات المحددة موجودة في reference/fee-comparison و ray/protocol-fees.

4. حسابات الملاحظة (حلقة TWAP)

يحتفظ كل من CPMM و CLMM بـ حساب ملاحظة لكل مجمّع — حلقة ذاكرة مؤقتة ذات حجم ثابت من عينات (timestamp, cumulative_price) التي يمكن للعقود الأخرى استخدامها لاشتقاق TWAP مقاوم للمعالجة.
// CPMM ObservationState (مختصر)
pub struct ObservationState {
    pub initialized: bool,
    pub observation_index: u16,            // الفتحة التالية للكتابة فوقها
    pub pool_id: Pubkey,
    pub observations: [Observation; OBSERVATION_NUM],
    pub padding: [u64; 4],
}

pub struct Observation {
    pub block_timestamp: u64,
    pub cumulative_token_0_price_x32: u128,  // مجموع (السعر × dt) منذ الإنشاء
    pub cumulative_token_1_price_x32: u128,
}
كيف يعمل:
  • كل مبادلة تستدعي update_observation. البرنامج يقرأ السعر الحالي، يضربه في الثواني المنقضية منذ الملاحظة السابقة، ويضيفه إلى العداد التراكمي. الإدخال الجديد يكتب فوق أقدم فتحة (نمط حلقة ذاكرة مؤقتة).
  • TWAP على نافذة = (cumul[end] − cumul[start]) / (timestamp[end] − timestamp[start]). يختار المستهلكون ملاحظتين توضيحان النافذة المرغوبة ويقسمان.
  • Raydium نفسه لا يستخدم TWAP للتسعير. رياضيات AMM تقرأ احتياطيات النقطة مباشرة. الملاحظات هي خارجية — Raydium يدفع تكلفة كتابتها حتى يتمكن العقود الأخرى من قراءتها.
  • AMM v4 لا يحتوي على حساب ملاحظة. إنه أقدم من تصميم ObservationState؛ المدمجون الذين يريدون TWAP v4 يتعين عليهم حساب واحد خارج السلسلة من تاريخ السجل.
تفاصيل التخطيط والرياضيات الفهرسة موجودة في products/cpmm/accounts و products/clmm/accounts.

5. REST API + SDK + IDL

السطح خارج السلسلة هو ثلاثية واحدة يستخدمها كل منتج:
  • REST APIhttps://api-v3.raydium.io. عرض مفهرس للقراءة في الغالب لجميع الحالة على السلسلة بالإضافة إلى محرك اقتباس. مضيف واحد، مخطط واحد.
  • TypeScript SDK@raydium-io/raydium-sdk-v2 على NPM. ينشئ وينقّع المعاملات لكل برنامج. يتحدث مع API للاقتباسات/البيانات الوصفية، يتحدث مع Solana RPC لتنعيش الحالة قبل التوقيع.
  • سجل IDL — Anchor IDLs لكل برنامج منشور يعيش في مستودع raydium-idl (JSON واحد لكل برنامج: CPMM، CLMM، LaunchLab). TypeScript SDK يستهلك هذه IDLs داخليًا؛ عملاء Rust / Python في المصب يعيدون الإنشاء من نفس الملفات.
الحدود بينهما واضحة:
الجزءيقرأ منيكتب إلىتحمل الجدول
REST APIIndexer (يحلل سجلات السلسلة)— (للقراءة فقط للمدمجين)بضع ثوانٍ
SDKAPI + RPCينشئ معاملات؛ لا يبثلا شيء — يجب إعادة جلب الحالة قبل التوقيع
IDLمصدر البرنامجنسخة لكل ترقية برنامج
خطأ شائع هو تغذية مخرجات REST API مباشرة إلى معاملة. لا تفعل — أعد جلب حالة المجمّع/الموضع المعني من Solana RPC في الفتحة التي توقّع عليها. يفعل SDK هذا تلقائيًا لتدفقات الطرف الأول؛ إذا تجاوزت SDK فيجب عليك القيام بذلك بنفسك. المرجع الكامل موجود في sdk-api/، مع سطح IDL تحديدًا في sdk-api/anchor-idl.

6. المفهرسات وموجزات الأسعار

يتم تغذية REST API بـ Raydium’s indexer الخاص، الذي يشترك في سجلات البرنامج من أسطول Solana RPCs ويكتب سجلات منزّلة إلى متجر SQL. نتيجتان للمدمجين:
  • المفهرس هو الشيء الوحيد الذي “يعرف عن” حالة برنامج متقاطع. ربط مجمّع CPMM بنظيره CLMM، حساب رقم حجم 24 ساعة عبر إصدارات البرنامج، التقاط مزرعة مرتبطة برمز LP — كل ذلك عمل مفهرس. البرامج نفسها لا تفعل ذلك.
  • تعطل المفهرس هو تعطل API. إذا أرجع API بيانات قديمة أو فارغة، المفهرس هو المشبوه. الحالة على السلسلة غير متأثرة؛ المدمجون بـ RPC و SDK خاصين بهم يمكنهم الاستمرار في المعاملات.
موجزات الأسعار مسألة منفصلة. ينشر API حقل priceUsd على معظم استجابات المجمّع؛ يتم حسابه خارج السلسلة من لقطة من عرض المفهرس لاحتياطيات المجمّع والسعر المرجعي المقتبس (مجمّعات USDC كمحور مشترك). يكفي للواجهة الرسومية؛ ليس من الآمن استخدامه كـ oracle على السلسلة. استخدم ملاحظة TWAP لذلك.

ما هو غير مشترك

يستحق التدرج صراحة، لأن القراء الجدد غالبًا ما يفترضون مشاركة أكثر مما يوجد:
  • البرامج لا تستدعي بعضها البعض. مبادلة CPMM لا تقوم أبدًا بـ CPI إلى CLMM أو AMM v4. البرنامج الوحيد الذي يؤلف عدة AMMs هو برنامج AMM Routing — وهذا الواحد نفسه رقيق، فقط ينبعث CPIs إلى كل AMM بالتتابع.
  • لا توجد سلطة ترقية مشتركة عبر البرامج. لكل برنامج على السلسلة مفتاح ترقية برنامج خاص به (متعدد توقيع 3/4 بالإضافة إلى قفل زمني بـ 24 ساعة). إنها غير مرتبطة.
  • لا توجد حالة مشتركة بين المزارع و AMMs. مزرعة لا تعرف ما إذا كان LP الذي تراهن عليه من مجمّع CPMM، رمز NFT موضع CLMM، أو رمز SPL غير ذي صلة. برنامج المزرعة يعامل رمز الرهن كمعتم.
  • لا توجد تبعية oracle. التسعير هو احتياطيات على السلسلة. لا يوجد احتياطي Pyth/Switchboard؛ AMM لا يفحص oracle قبل المقاصة.

المؤشرات

المصادر:
  • Raydium SDK v2 — مصدر الحقيقة لبذور PDA وتخطيطات الحسابات وتعريفات IDL.
  • Raydium IDL registry — Anchor IDLs.
  • صفحات حسابات محددة لكل منتج المذكورة أعلاه.