> ## 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

> منشئ معاملات المبادلة من جهة الخادم لـ Solana.

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

  [عرض النسخة الإنجليزية →](/api-reference/route-api-v2/overview)
</Info>

## ما هو 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 هو **للقراءة فقط** ولا يتطلب أي توقيع:

```bash theme={null}
GET /compute/swap-base-in?inputMint=EPjF...&outputMint=So111...&amount=1000000&slippageBps=50&txVersion=V0
```

الاستجابة تتضمن:

* مقدار الإخراج المتوقع
* تفصيل المسار (أي المجمعات ومصادر السيولة المستخدمة)
* تأثير السعر

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

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

```bash theme={null}
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)
* `txVersion` – `V0` أو `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 غلاف قياسي:

```json theme={null}
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "success": true,
  "version": "V1",
  "data": { ... }
}
```

في حالة الخطأ، `success` هي `false` و `msg` تحتوي على رمز الخطأ (مثل `REQ_WALLET_ERROR`، `REQ_SLIPPAGE_BPS_ERROR`).

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

تبدو استجابة معاملة ناجحة كالتالي:

```json theme={null}
{
  "id": "...",
  "success": true,
  "version": "V1",
  "data": {
    "transaction": "AgABB...",  // Base64-encoded transaction
    "addressLookupTableAddresses": ["Address1...", "Address2..."]  // For V0 only
  }
}
```

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

إليك سير عمل نموذجي في شكل كود زائف:

```typescript theme={null}
// 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`، يجب أن توفر حسابات رموز صريحة.

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

| الشبكة   | Mainnet                     | Devnet                             |
| -------- | --------------------------- | ---------------------------------- |
| Host     | `transaction-v1.raydium.io` | `transaction-v1-devnet.raydium.io` |
| Protocol | HTTPS                       | HTTPS                              |

## رموز الخطأ

رسائل الخطأ الشائعة:

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

## انظر أيضًا

* [OpenAPI Specification](/ar/api-reference/openapi/route-api-v2.yaml)
* [Aggregator Integration Guide](/ar/integration-guides/aggregator)
