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

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.

هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
معاملة Solana هي قائمة من التعليمات تُنفّذ بشكل ذري. فهم هيكل المعاملة — التعليمات والحسابات والموقّعون وميزانية الحساب — شرط ضروري لبناء أو تصحيح أو تحسين أي شيء مع Raydium. تغطي هذه الصفحة ذلك الهيكل والحدود التي تقيّده، وكيف تتراص فئتا الرسوم (رسوم شبكة Solana ورسوم بروتوكول Raydium) في مبادلة حقيقية.

تشريح المعاملة

لمعاملة Solana ثلاثة مكوّنات أساسية:
  • الرسالة (Message): القائمة المرتّبة للتعليمات والحسابات التي تشير إليها، و blockhash الحديث.
  • التوقيعات (Signatures): واحد لكل موقّع، يثبت أن المعاملة مُرخّصة.
  • blockhash الحديث: يثبت أن المعاملة حديثة؛ المعاملات ذات blockhashes القديمة (أقدم من 150 فتحة) مرفوضة.

التعليمات

تحدّد التعليمة:
  • program_id — البرنامج المراد استدعاؤه.
  • accounts — الحسابات (وأعلامها القابلة للكتابة/الموقّع) التي قد يلمسها البرنامج.
  • data — بايتات معتّمة يفسّرها البرنامج.
معاملة واحدة قد تحتوي على عدة تعليمات. تُنفّذ بالترتيب؛ إذا فشل أي منها، تُراجع جميع التعليمات السابقة (ذري). معاملة مبادلة Raydium نموذجية تتضمن:
  1. ComputeBudget::SetComputeUnitLimit — رفع حد CU الافتراضي.
  2. ComputeBudget::SetComputeUnitPrice — تعيين رسم الأولوية.
  3. CreateAssociatedTokenAccount اختياري — إنشاء ATA الإخراج إذا لم يكن لدى المستخدم واحد.
  4. Raydium::SwapBaseInput — تنفيذ المبادلة.
  5. CloseAccount اختياري — إغلاق wrapped-SOL ATA.
SDK يحزم هذه تلقائيًا عبر raydium.trade.swap().

الحسابات في المعاملات

يجب إدراج كل حساب يمسّه أي تعليمة في المعاملة في مفاتيح حساب المعاملة. كل حساب مُعلَّم:
  • موقّع / غير موقّع: هل يجب على صاحب الحساب توقيع المعاملة؟
  • قابل للكتابة / للقراءة فقط: هل يمكن للمعاملة تعديل الحساب؟
وقت التشغيل ينفذ هذه الأعلام: برنامج يحاول الكتابة إلى حساب غير قابل للكتابة يفشل، ووقت التشغيل يرفض المعاملات التي تفتقد الموقّعين المطلوبين. لمبادلة CPMM، قائمة الحسابات تحتوي على ~13 إدخال (انظر solana-fundamentals/account-model). مبادلات CLMM ذات عمليات عبور tick array متعددة قد تحتوي على 20+.

حد حجم المعاملة

Solana تحد المعاملات عند 1232 بايت بما في ذلك التوقيعات والرسالة والرؤوس. هذا هو أكثر عائق شائع للمعاملات المعقدة — CLMM من Raydium مع التوجيه متعدد المسارات ينطلق بانتظام ضد هذا الحد. تفصيل مبادلة Raydium نموذجية بحجم ~1000 بايت:
المكونالحجم
التوقيع64 B
عدد التوقيعات1 B
رأس الرسالة3 B
Blockhash32 B
مفاتيح الحسابات (13 × 32 B)416 B
التعليمات (4 × ~100-150 B)400–600 B
الإجمالي~900–1100 B

جداول البحث عن العناوين (ALTs)

ALTs تسمح للمعاملة بالإشارة إلى الحسابات من خلال فهرس 1 بايت في جدول منشور بدلاً من مفتاح عام 32 بايت كامل. هذا يضغط المعاملة بشكل كبير:
  • معاملة تشير إلى 20 حساب مباشرة: ~640 B من المفاتيح العمومية.
  • نفس المعاملة باستخدام ALTs: ~20 B من الفهارس + مراجع ALT.
Raydium تحتفظ بـ ALTs لمسارات مبادلة CPMM/CLMM على mainnet. SDK يستخدمها تلقائيًا. المجمّعات التي تبني مسارات متعددة المسارات تعتمد عليها بشكل كبير.
import { VersionedTransaction } from "@solana/web3.js";

// SDK builds a v0 (versioned) tx with ALT references
const { transaction } = await raydium.trade.swap({ /* ... */ });
// transaction is a VersionedTransaction, not a legacy Transaction.

ميزانية الحساب

لكل معاملة ميزانية وحدة الحساب (CU). تجاوزها ينهي التنفيذ ويفشل المعاملة.
  • الافتراضي: 200,000 CU لكل معاملة.
  • الحد الأقصى: 1,400,000 CU لكل معاملة (مرفوع عبر ComputeBudget::SetComputeUnitLimit).
  • سقف لكل كتلة: 48M CU لكل كتلة (مستوى البروتوكول).
استهلاك CU النموذجي من Raydium (انظر integration-guides/priority-fee-tuning للجدول الكامل):
التعليمةCU
مبادلة CPMM~140,000
مبادلة CLMM (بدون عمليات عبور tick)~170,000
مبادلة CLMM (4 عمليات عبور tick)~320,000
Farm v6 stake~130,000
إنشاء pool CPMM~250,000
قم دائمًا بتعيين حد CU صريح عبر ComputeBudget؛ وإلاّ ستحصل على الافتراضي 200k، وهو منخفض جدًا لمعظم تعليمات Raydium.
import { ComputeBudgetProgram } from "@solana/web3.js";

tx.add(
  ComputeBudgetProgram.setComputeUnitLimit({ units: 300_000 }),
);
إذا عيّنت حد CU منخفضًا جدًا، فشلت المعاملة عند الوصول للحد؛ عيّنته مرتفعًا جدًا وتخاطر بأن تكون مخفضة الأولوية تحت الاختناق (وحسب نموذج التسعير، قد تدفع لحساب لم تستخدمه أبدًا).

رسوم الأولوية

بما يتجاوز رسم المعاملة الأساسي (5000 lamports لكل توقيع)، يولي الموثقون بشكل متزايد الأولوية للمعاملات التي تدفع رسوم أولوية: نصيحة لكل CU بالمايكروlamports.
priority_fee = compute_unit_price (micro-lamports) × compute_unit_limit
مثال: 10,000 µL/CU × 300,000 CU = 3,000,000 µL = 0.003 SOL. رسوم الأولوية محلية — تؤثر فقط على الترتيب ضمن كتلة؛ لا تحسّن فرصتك في الإدراج مقابل عدمه. تعيين رسم أولوية معقول ضروري أثناء الاختناق.
tx.add(
  ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 10_000 }),
);
انظر integration-guides/priority-fee-tuning لكيفية تحديد حجم هذا ديناميكيًا.

حدود عدد التعليمات وعدد الحسابات

وراء حد 1232 بايت الكلي:
  • حد أقصى من الحسابات لكل معاملة: 128.
  • حد أقصى من الحسابات لكل تعليمة (CPI): 64.
  • حد أقصى من التعليمات لكل معاملة: لا يوجد حد صارم، محصور فقط بحد الحجم.
  • حد أقصى من عمق CPI: 4 (برنامج قد يستدعي آخر، الذي قد يستدعي آخر، 4 مستويات عميقة).
مبادلات CLMM من Raydium التي تعبر عدة tick arrays قد تندفع بقوة ضد حد الحسابات — مبادلة واحدة تلمس pool والخزانات المدخلة/المخرجة والـ ATAs المدخلة/المخرجة وعدة tick arrays وربما حسابات إضافية من برنامج transfer-hook زائد مراجع compute budget / نظام / برنامج token الإجبارية. التصاميم التي تركّب Raydium عبر CPI (مثلاً، auto-compounders) تحتاج للحساب على هذا.

فئات الرسوم في مبادلة Raydium

معاملة مستخدم تدفع رسوم في فئتين:

رسوم شبكة Solana

المدفوعة للموثقين بـ SOL.
  • رسم التوقيع الأساسي: 5000 lamports لكل توقيع. تقريبًا دائمًا 1 توقيع = 0.000005 SOL.
  • رسم الأولوية: CU-price × CU-limit بالمايكروlamports. يتغيّر مع الاختناق؛ انظر integration-guides/priority-fee-tuning.
هذه الرسوم تذهب للموثقين، غير مرتبطة بـ Raydium، وتُفرض حتى على المعاملات الفاشلة (ما عدا بعض حالات حافية لرسم الأولوية).

رسوم بروتوكول Raydium

مخصومة من مبلغ المبادلة.
  • رسم المبادلة: نسبة مئوية من المدخل (CPMM 0.25% نموذجي، CLMM 0.01%–1% لكل طبقة). مقسمة بين LPs والوجهات البروتوكول. انظر ray/protocol-fees.
هذه الرسوم داخلية لمحاسبة Raydium — المستخدم يراها كمبلغ إخراج أصغر مما قد ينتجه pool بدون رسوم.

مثال: $1000 USDC → SOL عبر CPMM 0.25% tier

فئة الرسمالمبلغيذهب إلى
رسم التوقيع الأساسي0.000005 SOL (~$0.0007)الموثق
رسم الأولوية (10k µL × 300k CU)0.003 SOL (~$0.45)الموثق
رسم مبادلة CPMM (0.25%)$2.50LPs + protocol
التكلفة الإجمالية للمستخدم~$2.95
الانزلاق (تأثير السعر + حركة السوق) ليس رسمًا لكنه يؤثر على نفس المحصلة.

المعاملات المُصدّرة

Solana لديها صيغتا معاملة:
  • Legacy: الصيغة الأصلية، بدون دعم ALT.
  • v0 (المُصدّرة): تدعم ALTs، قابلة للتوسع للإصدارات المستقبلية.
كل الأدوات الحديثة من Solana تستخدم v0. SDK من Raydium ينبث معاملات v0 بشكل افتراضي.
// Building a v0 tx directly
import { VersionedTransaction, TransactionMessage } from "@solana/web3.js";

const msg = new TransactionMessage({
  payerKey:        owner.publicKey,
  recentBlockhash: blockhash,
  instructions:    [ /* ... */ ],
}).compileToV0Message([lookupTableAccount]);

const tx = new VersionedTransaction(msg);
tx.sign([owner]);

حداثة Blockhash

يجب أن تتضمن معاملة blockhash من ضمن آخر ~150 فتحة (~60 ثانية). بعد تلك النافذة، الموثقون يرفضونها. لحلقات إعادة المحاولة، احصل على blockhash جديد في كل محاولة:
async function sendWithRetry(tx, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash();
    tx.message.recentBlockhash = blockhash;
    tx.sign([owner]);
    try {
      return await connection.sendRawTransaction(tx.serialize());
    } catch (e) {
      if (i === maxRetries - 1) throw e;
    }
  }
}
انظر integration-guides/priority-fee-tuning لنمط إعادة المحاولة الكامل مع تصعيد الرسوم.

التنفيذ المتوازي

Solana تنفذ معاملات غير متضاربة بشكل متوازي على موثقي متعدد الأنوية. معاملتان تتضارب إذا كتابتا نفس الحساب. الآثار على Raydium:
  • مبادلتان على نفس pool لا يمكن أن تنفذا بالتوازي — كلاهما يكتب حالة pool.
  • مبادلة على Pool A ومبادلة على Pool B تنفذان بالتوازي إذا لم تتداخل قوائم الحسابات.
  • معاملة للقراءة فقط لا تحجز كاتبًا على نفس الحساب (القراءة فقط متزامنة مع نفسها لكن ليس مع الكتابات).
هذا هو السبب في أن Solana تستطيع الحفاظ على throughput عالي لـ DEX رغم تسلسل pool الفردي.

مستويات تأكيد المعاملات

عند إرسال معاملة تختار مستوى التأكيد:
المستوىالانتظارالشمولية
processed~400 msغير نهائي؛ قد يتراجع
confirmed~1 sصوتت الأغلبية العظمى
finalized~13 sأرسخت الأغلبية العظمى
لـ UX المبادلة، confirmed معياري. للعمليات التي تتعامل مع قيمة كبيرة (إنشاء pool، تعبئة المكافآت)، finalized أأمن.
await connection.sendAndConfirmTransaction(tx, [owner], {
  commitment: "confirmed",
});

المحاكاة

Solana تدعم محاكاة معاملة قبل الإرسال:
const sim = await connection.simulateTransaction(tx);
console.log(sim.value.logs);
console.log(sim.value.unitsConsumed);
SDK من Raydium تستخدم المحاكاة داخليًا عند حساب getBestSwapInfo للتحقق من أن المسار المختار ينجح فعلاً. المحاكاة ليست مجانية — تستهلك سعة RPC — لكنها تلتقط الأخطاء قبل الدفع مقابلها.

مؤشرات

مصادر: