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

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.

هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →

ما هو Transaction API؟

Raydium Transaction API (Route V2) هي خدمة من جهة الخادم تقوم ببناء معاملات مبادلة Solana المسلسلة دون الحاجة للعملاء إلى الاحتفاظ باتصال RPC أو دمج Raydium SDK بالكامل. وهذا يبسط التكامل بشكل كبير لـ:
  • واجهات الويب التي لا تستطيع تشغيل عميل RPC محلي
  • تطبيقات الهاتف المحمول ذات الموارد المحدودة
  • بوتات التداول بدون واجهة مستخدم
  • المجمعات وموفرو المحافظ
بدلاً من إجراء عمليات توجيه المجمع المعقدة وإنشاء المعاملات على العميل، تطلب من API الحصول على عروض الأسعار وبناء المعاملات، ثم توقيعها وبثها باستخدام أي RPC للـ Solana.

نظرة عامة على سير العمل

يفصل Transaction API العمليات إلى مرحلتين:

1. مرحلة الحساب: الحصول على عرض سعر

اتصل بـ /compute/swap-base-in أو /compute/swap-base-out للحصول على الإخراج المتوقع للمبادلة (أو الإدخال المطلوب) بناءً على حالات المجمع الحالية. هذا الـ endpoint هو للقراءة فقط ولا يتطلب أي توقيع:
GET /compute/swap-base-in?inputMint=EPjF...&outputMint=So111...&amount=1000000&slippageBps=50&txVersion=V0
الاستجابة تتضمن:
  • مقدار الإخراج المتوقع
  • تفصيل المسار (أي المجمعات ومصادر السيولة المستخدمة)
  • تأثير السعر

2. مرحلة المعاملة: البناء والتوقيع

بمجرد حصولك على استجابة الحساب، مررها (إلى جانب المحفظة والإعدادات) إلى /transaction/swap-base-in أو /transaction/swap-base-out:
POST /transaction/swap-base-in
Content-Type: application/json

{
  "wallet": "YourWalletAddress",
  "swapResponse": { ...response from /compute/swap-base-in },
  "txVersion": "V0",
  "computeUnitPriceMicroLamports": "1000",
  "wrapSol": false,
  "unwrapSol": false,
  "inputAccount": "TokenAccount1...",
  "outputAccount": "TokenAccount2..."
}
تحتوي الاستجابة على:
  • معاملة مرمزة بصيغة base64 جاهزة للتوقيع
  • عناوين جدول البحث عن العناوين (إذا كان txVersion=V0)
يقوم عميلك بعد ذلك بـ:
  1. فك تشفير المعاملة
  2. توقيعها باستخدام مفتاح المستخدم الخاص
  3. بثها عبر أي RPC للـ Solana
  4. انتظار التأكيد

Compute Endpoints

GET /compute/swap-base-in

حالة الاستخدام: المستخدم يحدد مقدار الإدخال، ونحسب الإخراج. معاملات الاستعلام المطلوبة:
  • inputMint – عنوان mint للرمز الذي تُرسله
  • outputMint – عنوان mint للرمز الذي تريده
  • amount – مقدار الإدخال بالـ lamports (أصغر وحدة)
  • slippageBps – الانزلاق الأقصى المقبول بالنقاط الأساسية (0–10000)
  • txVersionV0 أو LEGACY
اختياري:
  • referrerBps – إذا كان لديك سلطة مرجع، نقاط أساسية من الإخراج لتحصيلها كرسم إحالة

GET /compute/swap-base-out

حالة الاستخدام: المستخدم يحدد الإخراج المطلوب، ونحسب الإدخال المطلوب. معاملات الاستعلام المطلوبة:
  • inputMint، outputMint، amount (الإخراج المطلوب)، slippageBps، txVersion
ملاحظة: لا توجد نقاط أساسية للمرجع عند swap-base-out (لم يتم تطبيقها بعد).

Transaction Endpoints

POST /transaction/swap-base-in

يبني معاملة لمقدار إدخال ثابت. النص المطلوب:
  • wallet – عنوان محفظتك الموقعة
  • swapResponse – كائن استجابة الحساب بالكامل
  • txVersion – إصدار المعاملة
  • computeUnitPriceMicroLamports – رسم الأولوية بالـ micro-lamports
اختياري:
  • wrapSol – إذا كانت true، يتم تغليف SOL الأصلي من أجل الإدخال
  • unwrapSol – إذا كانت true، يتم فك تغليف WSOL إلى SOL في الإخراج
  • inputAccount – حساب الرمز للإدخال (مطلوب إذا لم يتم تغليف SOL)
  • outputAccount – حساب الرمز للإخراج
  • nonceInfo – nonce دائم للتوقيع غير المتصل
  • jitoInfo – معاملات Jito MEV protection bundle
  • referrerWallet – محفظة المرجع لتحصيل الرسوم

POST /transaction/swap-base-out

يبني معاملة لمقدار إخراج ثابت. نفس معاملات base-in، باستثناء:
  • حقل referrerInfo معلق حاليًا (لم يتم تطبيقه بعد)

Response Envelope

تعيد جميع endpoints غلاف قياسي:
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "success": true,
  "version": "V1",
  "data": { ... }
}
في حالة الخطأ، success هي false و msg تحتوي على رمز الخطأ (مثل REQ_WALLET_ERROR، REQ_SLIPPAGE_BPS_ERROR).

شكل استجابة المعاملة

تبدو استجابة معاملة ناجحة كالتالي:
{
  "id": "...",
  "success": true,
  "version": "V1",
  "data": {
    "transaction": "AgABB...",  // Base64-encoded transaction
    "addressLookupTableAddresses": ["Address1...", "Address2..."]  // For V0 only
  }
}

مثال على التكامل

إليك سير عمل نموذجي في شكل كود زائف:
// 1. Get quote
const quote = await fetch(
  'https://transaction-v1.raydium.io/compute/swap-base-in?' +
  'inputMint=EPjF...&outputMint=So111...&amount=1000000&slippageBps=50&txVersion=V0'
).then(r => r.json());

// 2. Validate quote
if (!quote.success) {
  throw new Error(quote.msg);
}

// 3. Build transaction
const tx = await fetch(
  'https://transaction-v1.raydium.io/transaction/swap-base-in',
  {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      wallet: userWalletAddress,
      swapResponse: quote,
      txVersion: 'V0',
      computeUnitPriceMicroLamports: '1000',
      inputAccount: userInputTokenAccount,
      outputAccount: userOutputTokenAccount,
    }),
  }
).then(r => r.json());

// 4. Decode and sign
const transaction = VersionedTransaction.deserialize(
  Buffer.from(tx.data.transaction, 'base64')
);
transaction.sign([userKeypair]);

// 5. Send via RPC
const rpc = new Connection('https://api.mainnet-beta.solana.com');
const sig = await rpc.sendTransaction(transaction);
await rpc.confirmTransaction(sig);

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

txVersion

  • V0: معاملة Solana حديثة مع جداول البحث عن العناوين (ALTs). حجم تسلسل أصغر، رسوم أقل.
  • LEGACY: صيغة المعاملة السابقة للـ ALT. أكبر، لكنها تعمل مع جميع نقاط نهاية RPC.
اختر V0 عندما يكون ممكنًا؛ عد إلى LEGACY إذا كان RPC أو محفظتك لا تدعم ALTs.

computeUnitPriceMicroLamports

رسم الأولوية للإدراج في كتلة أسرع. اضبط على 0 بدون رسم أولوية، أو قيم أعلى (مثل 1000) للمنافسة في الشبكات المزدحمة. الوحدات بالـ micro-lamports لكل وحدة حساب.

slippageBps

الحد الأقصى لتحمل الانزلاق بالنقاط الأساسية. 100 = 1%، 50 = 0.5%.
  • استخدم قيم أقل (مثل 25–50 bps) لمعظم المبادلات المستقرة
  • زيادة للأزواج المتقلبة أو قليلة السيولة

wrapSol و unwrapSol

  • wrapSol: إذا كانت true، API تغلف SOL الأصلي في WSOL. لا حاجة إلى inputAccount.
  • unwrapSol: إذا كانت true، API تفك تغليف الإخراج WSOL إلى SOL الأصلي. لا حاجة إلى outputAccount.
إذا كانت كلاهما false، يجب أن توفر حسابات رموز صريحة.

نقاط نهاية الشبكة

الشبكةMainnetDevnet
Hosttransaction-v1.raydium.iotransaction-v1-devnet.raydium.io
ProtocolHTTPSHTTPS

رموز الخطأ

رسائل الخطأ الشائعة:
الرمزالمعنى
REQ_SLIPPAGE_BPS_ERRORالانزلاق غير صالح أو خارج النطاق
REQ_INPUT_MINT_ERRORعنوان mint الإدخال غير صالح
REQ_OUTPUT_MINT_ERRORعنوان mint الإخراج غير صالح
REQ_AMOUNT_ERRORالمقدار ليس رقمًا صالحًا
REQ_TX_VERSION_ERRORtxVersion يجب أن يكون V0 أو LEGACY
REQ_WALLET_ERRORعنوان المحفظة غير صالح
REQ_INPUT_ACCOUT_ERRORحساب الرمز للإدخال مفقود أو غير صالح
REQ_OUTPUT_ACCOUT_ERRORحساب الرمز للإخراج مفقود أو غير صالح
UNKNOWN_ERRORخطأ من جهة الخادم؛ تحقق من معاملات طلبك

انظر أيضًا