Skip to main content
هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
اعتبارًا من ترقية البرنامج 2026-07، تم إزالة اعتماد AMM v4 على OpenBook / Serum. تحتفظ تعليمات v1 القديمة SwapBaseIn / SwapBaseOut و Deposit و Withdraw بتخطيطات حساباتها القديمة للتوافقية العكسية: لا تزال حسابات السوق مقبولة في مواضعها القديمة، لكن لم تعد يتم التحقق منها أو استخدامها (لا يتم إصدار CPI). يجب على التكاملات الجديدة استخدام نقاط الدخول V2 للمبادلة، التي تحذف حسابات السوق بالكامل. تم إزالة عدة تعليمات والآن تعود — انظر إدخال السجل. تستخدم قوائم الحسابات أدناه أسماء الحقول من Raydium SDK؛ قد يستخدم IDL الأساسي بادئات serum_*.تضيف ترقية البرنامج 2026-09 تعليمة إدارية واحدة، WithdrawExcessLamports (الوسم 18)، وتحذف sysvar الإيجار من CreateConfigAccount. كل شيء يستدعيه المتداول أو LP لم يتغير. انظر إدخال السجل 2026-09-09.

جرد التعليمات

يكشف SDK عن منشئي التعليمات الموجهة للمستخدم فقط. عادة ما يتم استدعاء تعليمات الصيانة بواسطة حارس Raydium. تم إزالتها / لم تعد قابلة للاستدعاء (تم حذف منشئي العميل الخاصة بها): Initialize (الوسم 0، استخدم Initialize2)، MonitorStep (2)، MigrateToOpenBook (5)، WithdrawSrm (8)، PreInitialize (10، استخدم Initialize2)، SimulateInfo (12)، AdminCancelOrders (13). تفشل المعاملة التي تحمل أحد هذه الوسوم؛ البرنامج لا ينفذ التعليمة أبدًا. تعامل مع جميع السبعة على أنها اختفت بدلاً من أن تكون مسارات خطأ للتعامل معها.

Initialize2

بدء pool AMM v4 جديد مرتبط بسوق OpenBook موجود. المعاملات
الحسابات (قابلة للكتابة W، موقّع S)
تخطيطان مقبولان. قائمة الـ 19 حسابًا أعلاه هي الموصى بها. من أجل التوافق مع الإصدارات السابقة يقرأ البرنامج أيضًا تخطيطًا قديمًا من 21 حسابًا، يُدرج amm_open_orders مُتجاهلًا في الموضع 7 و market_program مُتجاهلًا في الموضع 16 — وهذا ما لا يزال بانِي تعليمة initialize2 الموجود في المستودع يُصدره. أي طول آخر يُحلَّل موضعيًا مقابل التخطيط القديم وسيفشل.
الشروط اللاحقة
  • LP المُصدَر للمُنشئ = sqrt(init_coin_amount × init_pc_amount) − 10^coin_mint.decimals. تساوي منازل LP العشرية coin_mint.decimals، لذا فالمقدار المطروح هو رمز LP كامل واحد بالضبط؛ لا يُصدر أبدًا ويبقى خارج التداول بشكل دائم. إذا كان sqrt(...) أقل من ذلك، تُرجع التعليمة الخطأ InitLpAmountTooLess.
  • يخزّن AmmInfo.lp_amount قيمة sqrt(...) الكاملة، وليس المقدار المُصدَر — لذا فإن lp_mint.supply أقل بشكل دائم بمقدار رمز LP كامل واحد من amm.lp_amount. كل الحسابات التناسبية تستخدم amm.lp_amount.
  • لا يتم نشر أوامر OpenBook (تم إزالة شبكة دفتر الطلبات). يسجّل AmmInfo.market الحساب المُمرَّر في الخانة 15، لكن يُكتب كل من AmmInfo.open_orders و AmmInfo.market_program بالقيمة Pubkey::default()، ويتم تهيئة coin_lot_size / pc_lot_size / min_size إلى 0. في التخطيط القديم المكوّن من 21 حسابًا يُقرأ الحسابان الإضافيان amm_open_orders و market_program ثم يُهملان.
الأخطاء الشائعة — InvalidCoinMint (عملة coin و pc متطابقتان)، InvalidConfigAccount (PDA خاطئ لـ amm_config)، InvalidFee (وجهة خاطئة لرسم إنشاء التجمع)، InvalidProgramAddress (amm_authority خاطئ أو nonce خاطئ)، RepeatCreateAmm (يوجد تجمع لهذا السوق بالفعل)، InitLpAmountTooLess، InvalidSupply (أحد مقداري التهيئة 0، أو أن عملة LP لديها عرض بالفعل)، AlreadyInUse.

Deposit

إضافة السيولة. المعاملات
الحسابات (مختصرة)
الأعداد المقبولة هي 11 أو 14 أو 15 — لا شيء غير ذلك. التخطيط القديم هو 14 حسابًا (أو 15 مع حساب مُتجاهل في النهاية): نفس القائمة مع amm_open_orders مُتجاهل في الموضع 4، و market مُتجاهل في الموضع 9، و market_event_queue مُتجاهل مُلحق في الموضع 14. أي عدد آخر يُرجع WrongAccountsNumber.
الرياضيات — نسبة قياسية. باستخدام الاحتياطيات الفعلية للـ pool (الأقبية + المُدرجة)، يحسب SDK زوج coin/pc الذي ينتج عنه مبلغ LP المعطى ويتحقق منه مقابل max_*. يعود مع ExceededSlippage إذا تجاوز أي جانب الحد الأقصى.

Withdraw

حرق LP، استقبال كلا الجانبين. المعاملات
الحسابات — التخطيط الموصى به المكوّن من 11 حسابًا
Withdraw ليست Deposit معكوسة. الأعداد المقبولة هي 11، أو من 20 إلى 23. التخطيط القديم المكوّن من 20 حسابًا يضع حساب LP للمستخدم قبل الـ ATA المستقبلَين ويُشابك خمسة حسابات سوق مُتجاهلة: token_program, amm(W), amm_authority, amm_open_orders(W), amm_target_orders(W), lp_mint(W), pool_coin_token_account(W), pool_pc_token_account(W), market_program, market(W), market_coin_vault(W), market_pc_vault(W), market_vault_signer, user_lp_token_account(W), user_coin_token_account(W), user_pc_token_account(W), user_owner(S), market_event_queue(W), market_bids(W), market_asks(W). أما الشكلان المكوّنان من 22 و 23 حسابًا فيُدرجان حسابَي حشو مُتجاهلَين بعد الموضع 8. أي عدد آخر يُرجع WrongAccountsNumber.
لم تبقَ أي خطوة تسوية من OpenBook — تستخدم الحسابات التناسبية أرصدة الخزائن مباشرة.

SwapBaseIn

مبادلة بمدخل دقيق. دائمًا مبادلة مسار AMM (لا تسير عبر مطابقة OpenBook).
استخدم متغيرات V2 للكود الجديد. نظرًا لأنه تم إزالة اعتماد AMM v4 على OpenBook، لا تزال نقاط الدخول V1 (SwapBaseIn، SwapBaseOut) تتوقع قائمة الحسابات الكاملة المكونة من 17 حسابًا (أو 18 مع حساب target-orders الاختياري)، لكن حسابات OpenBook/market الآن مقبولة بشكل موضعي ومُتجاهلة — لا يتم التحقق منها ولا يتم إصدار CPI. لا يزال تمرير عدد حسابات خاطئ يعود مع WrongAccountsNumber، لكن محتويات حساب السوق لم تعد يتم التحقق منها. يجب على التكاملات الجديدة استخدام SwapBaseInV2 / SwapBaseOutV2، التي تأخذ قائمة حسابات أصغر بكثير وتمثل مسار التنفيذ الكنسي اليوم. يتم توثيق النماذج V1 هنا للاكتمال وللقراءة من المعاملات على السلسلة الموجودة.
المعاملات
الحسابات (مختصرة) الرياضيات — انظر products/amm-v4/math. الشروط السابقة
  • AmmStatus::from_u64(amm.status).swap_permission() صحيحة — أي أن status هي 1 (Initialized) أو 6 (SwapOnly) أو 7 (WaitingTrade). فـ status قيمة تعدادية وليست bitmask؛ انظر products/amm-v4/accounts.
  • amm.state_data.pool_open_time <= now.
  • amount_in > 0.
  • user_source_token_account يحتفظ بـ amount_in على الأقل.
الشروط اللاحقة
  • يفقد المستخدم amount_in من الرمز المصدر، ويكسب amount_out ≥ minimum_amount_out من رمز الوجهة.
  • يبقى رسم المبادلة في الخزائن، مما يرفع الثابت k. وعدادات need_take_pnl_* لا تتأثر بالمبادلات — يُعاد حساب PnL البروتوكول من دلتا k عند أول Deposit أو Withdraw أو WithdrawPnl تالية (Processor::calc_take_pnl).
  • ملاحظة: عدادات التحليلات state_data.swap_*_in_amount / swap_*_out_amount لم تعد يتم تحديثها — قيمها مجمدة. استخدم سجلات التداول لتحليلات الحجم.
الأخطاء الشائعة — ExceededSlippage، InvalidInput، InvalidStatus، NotAllowed (رمز coin/pc متطابق).

SwapBaseOut

مخرج دقيق، معكوس SwapBaseIn. نفس الحسابات. المعاملات

SwapBaseInV2 / SwapBaseOutV2

نقاط دخول مبادلة متغيرة (الوسوم 16 / 17) التي تتخطى حسابات OpenBook بالكامل. الرياضيات متطابقة مع مسار V1، لكن قائمة الحسابات تنكمش إلى جانب AMM والمستخدم فقط — 8 حسابات، و amm_open_orders لا يتم تمريره: احتياطيات Pool الآن هي أرصدة الأقبية (ناقص PnL المعلق)، لذا فإن رياضيات الاقتباس مباشرة ومتطابقة مع مسار v1. استخدم V2 لتوفير الحساب وتجنب تمرير حسابات السوق (المُتجاهلة الآن). يستخدم موجه Raydium دائمًا نموذج V2 عند التوجيه عبر AMM v4. المعاملات هي نفسها نماذج V1 (amount_in / minimum_amount_out لـ SwapBaseInV2؛ max_amount_in / amount_out لـ SwapBaseOutV2).

MonitorStep والتعليمات المحذوفة الأخرى

تم إزالتها — لم تعد قابلة للاستدعاء. اعتبارًا من ترقية 2026-07، تم إزالة MonitorStep (الوسم 2) من البرنامج والآن يعود (unimplemented!) إذا تم استدعاؤه. تم حذف منشئ العميل الخاص به أيضًا. ينطبق الشيء نفسه على MigrateToOpenBook (5)، WithdrawSrm (8)، SimulateInfo (12)، AdminCancelOrders (13)، ونقاط دخول إنشاء pool القديمة Initialize (0) / PreInitialize (10) — استخدم Initialize2 بدلاً من ذلك.
تاريخيًا، كان MonitorStep يدير تفاعل pool مع OpenBook: كان يسوي الأوامر المملوءة (نقل العائدات من أقبية السوق إلى أقبية pool عبر OpenBook CPI)، وإلغاء الأوامر القديمة، ونشر أوامر جديدة لإغلاق الفجوة بين target_orders و amm_open_orders. مع إزالة اعتماد OpenBook، لا يوجد شيء للإدارة والتعليمة اختفت. يجب على أي حارس أو تكامل لا يزال يستدعيه إزالة الاستدعاء.

WithdrawPnl / TakePnl

تجميع إداري لرسوم البروتوكول المتراكمة. المعاملات
  • WithdrawPnl لا تأخذ أي معاملات؛ تقرأ need_take_pnl_* وتنقل تلك المبالغ بالضبط.
كسر التوافقية (إدارة فقط). انخفضت قائمة الحسابات من 17 (+1 اختياري) إلى 10 — تم إزالة amm_open_orders وجميع حسابات السوق الستة — بدون تحليل توافقية. التخطيط القديم لا يتطابق (كان #5 القديم amm_open_orders، الآن pool_coin_token_account) ويفشل مع أخطاء مثل InvalidCoinVault. يجب تحديث أدوات الإدارة.
الحسابات (تخطيط 10 حسابات جديد) التأثير
  • ينقل need_take_pnl_coin من pool_coin_token_account إلى pnl_coin_token_account.
  • نفس الشيء لـ pc.
  • يصفر need_take_pnl_coin و need_take_pnl_pc.
  • تغيير المنطق: إذا كان رصيد القبو غير كافٍ لتغطية PnL المتراكم، تعود التعليمة مع TakePnlError مباشرة (لم تعد تتلاعب بحالة دفتر الطلبات).
لا يوجد تغيير في الاحتياطيات لأن PnL المتراكم كان مستبعدًا بالفعل من الثابت.

SetParams

تغييرات معاملات الإدارة، يستدعيها multisig Raydium. المعاملات هي وسم param: u8 + حمولة.
كسر التوافقية (إدارة فقط). تم تقليل قائمة الحسابات إلى مجرد [amm (W)، admin (S)] (تم إزالة السلطة، open-orders، target-orders، vault، وجميع حسابات السوق). تم إعادة ترقيم واختصار enum param: Status = 0، State = 1، Fees = 2 (كان 9)، SetOpenTime = 3 (كان 11). تم إزالة جميع معاملات شبكة دفتر الطلبات و AmmOwner، LastOrderDistance، UpdateOpenOrder، وأسقطت struct SetParamsInstruction new_pubkey و last_order_distance. يجب تحديث أدوات الإدارة.

CreateConfigAccount / UpdateConfigAccount

إدارة إدارية لـ AmmConfig PDA على مستوى البرنامج (البذرة ["amm_config_account_seed"]). يحتفظ الحساب بثلاثة حقول ذات معنى فقط — pnl_owner و cancel_owner و create_pool_fee — بالإضافة إلى منطقتَي حشو محجوزتين؛ ولا يوجد علم لإنشاء التجمعات. تعيّن UpdateConfigAccount الحقل pnl_owner بـ param = 0، و cancel_owner بـ param = 1، و create_pool_fee بـ param = 2.
تغيرت في 2026-09، وتوافقية عكسية. لم تعد CreateConfigAccount تقرأ sysvar الإيجار. قائمة حساباتها الآن 4 حسابات، انخفاضًا من 5:يقرأ البرنامج معاملات الإيجار من Rent::get() بدلاً من فك تسلسل حساب sysvar الذي تم تمريره — ما جعلته طبيعيًا اعتماد Solana 3.0.الحساب المحذوف كان الأخير في القائمة، والمعالج يقرأ حساباته بشكل موضعي عبر next_account_info بدون فحص الطول. لذلك فإن أداة إدارة موجودة لا تزال تمرر قائمة الحسابات القديمة المكونة من 5 حسابات تستمر في العمل: حساب الإيجار الزائد لا يتم قراءته أبدًا. حدثه عند الراحة، وليس بشكل عاجل. UpdateConfigAccount لم يتغير.
تحتفظ Initialize2 بـ sysvar الإيجار في الموضع 3، وتستخدمه بالفعل: توقف البرنامج عن استدعاء Rent::from_account_info عليه، لكن لا يزال يتم تمريره إلى CPIs spl_token::initialize_account و initialize_mint التي تنشئ أقبية pool و LP mint. لا تحذفه من قائمة الحسابات.

WithdrawExcessLamports

تجميع إداري لـ lamports الجالسة فوق الحد الأدنى المعفي من الإيجار على الحسابات التي يتحكم فيها البرنامج. تمت الإضافة في ترقية 2026-09 لاسترجاع الإفراط في التمويل الذي يتركه SIMD-0437 rent reduction خلفه على الحسابات المُنشأة قبل كل خطوة. ينقل الفائض فقط. أرصدة الرموز، بيانات الحساب، المالكون، وحالة pool لم تتغير، والتعليمة هي no-op على حساب بالفعل في الحد الأدنى — لذا فمن الآمن إطلاقها بشكل متكرر وأيضًا بعد كل خطوة طرح. المعاملات — لا شيء. الحمولة هي بايت الوسم الفردي 18. الحسابات كيفية التعامل مع كل حساب مصدر يقوم البرنامج بالتوزيع على owner حساب المصدر: الأخطاء الشائعة — InvalidSignAccount (موقّع خاطئ)، InvalidSplTokenProgram (برنامج خاطئ في الفتحة 3)، InvalidProgramAddress (amm_authority خاطئ)، LamportsCalculateError (كود مخصص 60؛ رحلة wSOL ذهابًا وإيابًا لم تصل إلى صفر)، و InsufficientFunds من مسار البرنامج المملوك عندما يحتفظ حساب بأقل من حد الإيجار الخاص به. لا منشئ SDK. لا تشحن @raydium-io/raydium-sdk-v2 منشئًا لهذه التعليمة، ولا يفعل مستودع raydium-sdk-V2-demo — إنه مسار إدارة. قم بترميزه يدويًا، بالطريقة التي يفعلها تجميع الجانب المحفظة في solana-fundamentals/rent-and-reclaimable-rent لتعليمة برنامج الرموز.

مصفوفة تغيير الحالة

عمود OpenBook اختفى — لا تعليمة تلمس دفتر الطلبات بعد الآن.

أين تذهب بعد ذلك

المصادر: