Skip to main content
هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
اعتبارًا من ترقية 2026-07، تم إزالة اعتماد AMM v4 على OpenBook / Serum — لا توجد تعليمات تقرأ أو تكتب حالة OpenBook بعد الآن. يتم الاحتفاظ بحسابات السوق أدناه فقط كعناصر نائبة موضعية على تخطيطات التعليمات v1 القديمة (مقبولة لكن مُتجاهلة) وكحقول مرجعية على AmmInfo. استخدم نقاط نهاية المبادلة V2، التي تحذفها تمامًا. تجمع هذه الصفحة الحسابات في أقسام “مملوكة للمجمع” و”OpenBook (قديمة)” لقراءة المعاملات الأقدم.

الجرد

يسجل مجمع AMM v4 سوقًا واحدًا مرتبطًا على AmmInfo عند الإنشاء. الصورة الكاملة: ملاحظة: يتم الاحتفاظ بـ “serum” كبادئة في IDL وأسماء الحقول الخاصة بـ AMM v4 للتوافق العكسي. لم تعد هذه الحسابات وظيفية بعد إزالة OpenBook.

AmmInfo

حساب حالة جذر المجمع. كبير (≈ 752 بايت) لأنه يحمل مراجع المجمع و OpenBook مضمنة.
تخطيط البنية لم يتغير (متوافق بايت) لذا تبقى المُفكّكات الموجودة تعمل، لكن بعد إزالة OpenBook الحقول المُشار إليها بـ DEPRECATED أعلاه لم تعد تُكتب — عدادات الحجم swap_* مجمدة عند آخر قيمة لها. لتحليلات الحجم، استخدم سجلات التداول بدلاً من هذه الحقول. فقط need_take_pnl_* و pool_open_time يتم صيانتهما بنشاط.
الحقول الموجهة للمدمجين:
  • coin_vault, pc_vault — خزائن SPL Token للمجمع. coin هو token_0 حسب اتفاقية Serum/OpenBook (الأساس)، pc هو token_1 (الاقتباس).
  • coin_decimals, pc_decimals — مطابقة للعملات.
  • open_orders, target_orders, market — حقول مرجعية قديمة. لا تزال موجودة على AmmInfo وتُمرر موضعيًا على تخطيطات التعليمات v1، لكن البرنامج لم يعد يقرأها أو يتحقق منها. نقاط نهاية المبادلة V2 تحذفها.
  • fees.swap_fee_numerator / swap_fee_denominator — رسم التداول المدمج. الافتراضي 25 / 10_000 = 0.25%.
  • status — حالة u64 مُعدَّدة واحدة تحدّ العمليات، وهي ليست bitmask. قابلة للتعيين من قبل المسؤول عبر SetParams مع param = 0 (Status). انظر الحالة أدناه.
  • lp_amount — إجمالي LP الداخلي للمجمع. وهو لا يساوي lp_mint.supply: إنه أعلى بمقدار رمز LP كامل واحد بالضبط (10^coin_decimals وحدة أساسية)، لأن ذلك المقدار يُحسب عند التهيئة لكنه لا يُصدر أبدًا. كل الحسابات التناسبية تستخدم lp_amount، فاستخدمه أنت أيضًا.
  • amm_owner — يُكتب عند الإنشاء من مفتاح المسؤول المضمّن في البرنامج، وليس من المنشئ.
  • state_data.need_take_pnl_* — الفرق بين الرسوم المتراكمة الإجمالية وما تم مسحه. TakePnl يصفر هذه.

توصيل OpenBook

تم الحذف. تم حذف اعتماد OpenBook / Serum من البرنامج (ترقية 2026-07). الحسابات الموصوفة في هذا القسم لم تعد يتم التحقق منها أو استخدامها. تبقى كحقول مرجعية على AmmInfo وكعناصر نائبة موضعية على تخطيطات التعليمات v1 القديمة. استخدم نقاط نهاية المبادلة V2 (SwapBaseInV2 / SwapBaseOutV2) التي تتخطى هذه الحسابات تمامًا.
عند استدعاء تعليمة v1 قديمة SwapBaseIn / SwapBaseOut أو Deposit أو Withdraw، يجب أن يطابق عدد الحسابات التخطيط القديم (حسابات السوق تحتل مواضعها التاريخية)، لكن محتوياتها لم تعد يتم فحصها — لا يتم إصدار CPI ضدها. يجب أن يستخدم الكود الجديد متغيرات المبادلة V2، التي لا تأخذ هذه الحسابات على الإطلاق.
amm_open_orders للمجمع هو حساب مملوك لـ OpenBook يحتفظ بحالة الطلب المحدود للمجمع على هذا السوق: الطلبات النشطة والأرصدة المستقرة والمحيلون وما إلى ذلك. amm_target_orders من جانب AMM: يحتفظ بالشبكة المقصودة للمجمع (السعر/الحجم لكل فتحة طلب) حتى يتمكن البرنامج من المقارنة بسهولة مع ما يتم نشره حاليًا ووضع / إلغاء الفرق.

PDAs السلطة

يوجد بالضبط PDA amm_authority واحد لبرنامج AMM v4 بأكمله. بذره تافهة (["amm authority"]) وتُخزن نتيجته على كل AmmInfo. توقّع هذه السلطة جميع حركات الرموز لجميع مجمعات AMM v4.
لا توجد سلطة ثانية محدودة النطاق بالمجمع: هذا الـ PDA الواحد يغطي كل ما يوقّعه البرنامج. قيمة bump الخاصة به هي 254 على الشبكة الرئيسية وهي مُنسَخة على كل AmmInfo كـ nonce؛ وتعيد WithdrawExcessLamports اشتقاقها مع تضمين ذلك الـ nonce بشكل ثابت.

الخزائن

خزائن SPL Token للمجمع هي حسابات رموز قياسية يكون owner لها amm_authority. ليست ATAs — عناوينها PDAs مشتقة عند Initialize2 من [AMM_V4_PROGRAM_ID, market, "coin_vault_associated_seed"] و [AMM_V4_PROGRAM_ID, market, "pc_vault_associated_seed"]. العملة ليست بذرة، ولا amm_id كذلك. يتم تخزين العناوين على AmmInfo؛ الاشتقاق فضول لمرة واحدة. Token-2022 غير مدعوم. يحمّل البرنامج معرّف برنامج SPL Token لجميع حركات الخزائن. محاولة ربط مجمع AMM v4 بعملة Token-2022 تفشل عند Initialize2 بـ InvalidSplTokenProgram.

عملة LP

عملة SPL Token كلاسيكية سلطتها amm_authority. إجمالي العرض يتتبع ملكية LP للمجمع؛ حرق LP يعيد الرموز من كلا الخزائن بنسبة. توجد مرآة داخل الحالة: AmmInfo.lp_amount. وهي لا تساوي عرض العملة — إنها أعلى بمقدار رمز LP كامل واحد بالضبط (10^coin_decimals وحدة أساسية)، لأن ذلك المقدار يُحسب عند التهيئة لكنه لا يُصدر أبدًا. كل حساب تناسبي في البرنامج يقسم على lp_amount، فاستخدم ذلك الحقل بدلاً من عرض العملة على السلسلة.

الحالة

AmmInfo.status هي حالة u64 مُعدَّدة واحدة، وهي ليست bitmask. اختبرها بالتساوي — العميل الذي يختبر status & 1 يصنّف كل مجمع نشط تصنيفًا خاطئًا، لأن حالة التداول العادية هي 6، والتي بها البت 0 مضبوط. تكتب Initialize2 القيمة 7 عندما يكون open_time في المستقبل و 6 غير ذلك؛ والمجمع الموجود عند 7 يقلب نفسه إلى 6 عند أول مبادلة عند أو بعد state_data.pool_open_time. أي قيمة خارج 0..=7 تجعل AmmStatus::from_u64 يتعطل. تعيّن مجموعة Raydium متعددة التوقيع الحالة عبر SetParams مع param = 0 (Status)؛ ولا تُقبل إلا القيم 1–7. (تم إزالة AdminCancelOrders.)

الملاحظة / الأوراكل

لا يمتلك AMM v4 حساب مراقبة مخصصًا، ومنذ إزالة OpenBook لم تبقَ حالة دفتر أوامر يمكن اشتقاق واحد منها أيضًا. إذا احتجت إلى TWAP من Raydium بدعم من البرنامج، فاستخدم CPMM أو CLMM — كلاهما يحتفظ بحاوية حلقية ObservationState. غير ذلك، فهرِس سجلات المبادلة خارج السلسلة.

اشتقاق حسابات المجمع من الصفر

حسابات مجمع AMM v4 هي PDAs عادية مفتاحها السوق المرتبط — ليست مفاتيح مزروعة، وليست PDAs لكل زوج. كل واحد منها يستخدم نفس شكل البذور الثلاثية [AMM_V4_PROGRAM_ID, market, <label>] تحت AMM_V4_PROGRAM_ID:
السوق المرتبط هو البذرة المتغيرة الوحيدة، ولهذا يقابل كل سوق مجمع AMM v4 واحدًا بالضبط. SDK والـ API يحسبان هذه مسبقًا لك؛ انظر raydium-sdk-v2 الخاص بـ Liquidity.getAssociatedPoolKeys. في الممارسة العملية، يقرأ المدمجون مجموعة الحسابات الكاملة للمجمع من GET https://api-v3.raydium.io/pools/info/ids?ids=<POOL_ID> أو من SDK. الاشتقاق اليدوي نادرًا ما يكون مطلوبًا.

مرجع دورة الحياة السريع

تستمر المجمعات وحساباتها إلى الأبد. حتى لو تم سحب السيولة بالكامل، AmmInfo يبقى.

ما يجب قراءته أين

المصادر: