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

# حسابات المزرعة / التثبيت (Staking)

> FarmState و UserStake / Ledger وخزائن المكافآت وسلطة PDAs — تخطيطات وبذور PDA لمزرعة v3 و v5 و v6.

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

  [عرض النسخة الإنجليزية →](/products/farm-staking/accounts)
</Info>

<Info>
  **ثلاث برامج، ثلاثة أنماط.** المزرعة v3 و v5 و v6 عبارة عن برامج منفصلة بتخطيطات حالة مختلفة. تُوثِّق هذه الصفحة كل إصدار جنباً إلى جنب. في الواقع العملي، تستهدف معظم التكاملات الجديدة v6؛ v3 و v5 للقراءة فقط بالنسبة لمعظم المدمجين (التثبيت حدث هناك منذ زمن طويل والمجمعات في طور الإغلاق).
</Info>

## جرد الحساب (لكل مزرعة، أي إصدار)

| الحساب                                  | المالك                    | الغرض                                                                                |
| --------------------------------------- | ------------------------- | ------------------------------------------------------------------------------------ |
| `FarmState`                             | برنامج المزرعة (v3/v5/v6) | الحالة الجذرية: عملة التثبيت، إجمالي المثبت، تدفقات المكافآت.                        |
| `farm_authority`                        | برنامج المزرعة            | PDA تمتلك خزانة التثبيت وخزائن المكافآت.                                             |
| `staking_vault`                         | SPL Token                 | يحتفظ بـ LP المثبت (أو أيًا كانت عملة التثبيت).                                      |
| `reward_vault_{i}`                      | SPL Token                 | يحتفظ بميزانية غير موزعة لتدفق المكافأة `i`. واحدة لكل تدفق.                         |
| `UserStake` (v3/v5) / `UserLedger` (v6) | برنامج المزرعة            | دفتر أستاذ لكل `(مزرعة، مستخدم)`: المبلغ المثبت + لقطة من المكافأة لكل حصة لكل تدفق. |

يعيد SDK المجموعة الكاملة على `raydium.farm.getFarmById`. بالنسبة للمزارع الخارجية التابعة لطرف ثالث، تعيد نقطة نهاية API `GET https://api-v3.raydium.io/main/farms/info?ids=<FARM_ID>` أيضاً هذه المعلومات.

## تخطيط `FarmState` — v6

v6 هو الإصدار الحالي. هيكل حسابه هو الأكثر عمومية.

```rust theme={null}
// programs/farm_v6/src/state/farm.rs (abridged)
pub struct FarmState {
    pub state: u64,                // bitfield: 0 = live, 1 = paused, ...
    pub nonce: u64,                 // bump for farm_authority
    pub creator: Pubkey,            // original creator (can add rewards / transfer admin)
    pub staking_mint: Pubkey,
    pub staking_vault: Pubkey,
    pub staking_token_program: Pubkey, // SPL Token or Token-2022
    pub lp_mint_decimals: u8,
    pub reward_period_len: u64,     // minimum duration between SetRewards edits
    pub reward_period_min: u64,
    pub total_staked: u64,
    pub reward_info_count: u8,
    pub _reserved: [u8; ...],
    pub reward_infos: [RewardInfo; 5], // up to 5 reward streams
}

pub struct RewardInfo {
    pub reward_state: u8,           // 0 = unused, 1 = running, 2 = ended
    pub open_time: u64,             // start_time
    pub end_time: u64,
    pub last_update_time: u64,
    pub emission_per_second_x64: u128, // Q64.64 fixed-point rate
    pub reward_total_emissioned: u64,   // sum of emissions so far
    pub reward_claimed: u64,            // sum paid out to stakers
    pub reward_vault: Pubkey,
    pub reward_mint: Pubkey,
    pub reward_sender: Pubkey,          // who deposited the budget; can top up
    pub reward_token_program: Pubkey,   // SPL or Token-2022
    pub reward_per_share_x64: u128,     // Q64.64 counter
}
```

الحقول الموجهة للمدمج:

* **`staking_mint` و `staking_vault`** — ما يتم تثبيته وأين يوجد.
* **`total_staked`** — الإجمالي الحالي. مطلوب لحساب APR: `reward_per_second × 86400 / total_staked`.
* **`reward_infos[i].emission_per_second_x64`** — معدل Q64.64. اقسمه على `2^64` للحصول على عدد الرموز الصحيح في الثانية.
* **`reward_infos[i].open_time` / `end_time`** — لعروض واجهة المستخدم "X أيام متبقية".
* **`reward_infos[i].reward_per_share_x64`** — العداد الذي ينحرف عنه `UserLedger`.

## تخطيط `FarmState` — v5

```rust theme={null}
pub struct FarmStateV5 {
    pub state: u64,
    pub nonce: u64,
    pub lp_vault: Pubkey,            // aka staking_vault
    pub reward_vaults: [Pubkey; 2],
    pub owner: Pubkey,
    pub reward_mints: [Pubkey; 2],
    pub reward_total_emissioned: [u64; 2],
    pub reward_claimed: [u64; 2],
    pub reward_per_second: [u64; 2],  // integer, not fixed-point
    pub reward_open_time: [u64; 2],
    pub reward_end_time: [u64; 2],
    pub reward_per_share: [u128; 2],  // Q56.8 or similar; check program source
    pub total_staked: u64,
    pub last_slot: u64,               // v5 updates per-slot on mainnet
    pub _reserved: [u8; 256],
}
```

الاختلافات عن v6:

* **لكل فتحة، وليس لكل ثانية.** حلقة تحديث v5 تعمل على الفتحات بدلاً من الساعة الحائطية. يقوم SDK بتطبيع هذا إلى "لكل ثانية" للواجهة الأمامية لكن على السلسلة الوحدة هي الفتحات.
* **معدل انبعاث صحيح.** `reward_per_second` هو `u64`. هذا يحد من الحد الأدنى المعبر عنه بـ 1 وحدة في الثانية، وهو خشن جداً لتدفقات الانبعاث المنخفضة على عملات 9-عشرية. أصلحت v6 هذا بمعدل Q64.64.
* **بدون `reward_sender`.** في v5 يكون المالك هو المرسل الضمني؛ فقط `owner` يمكنه زيادة الرصيد.

## تخطيط `FarmState` — v3

```rust theme={null}
pub struct FarmStateV3 {
    pub state: u64,
    pub nonce: u64,
    pub lp_vault: Pubkey,
    pub reward_vault: Pubkey,          // single reward
    pub owner: Pubkey,
    pub reward_mint: Pubkey,
    pub reward_total_emissioned: u64,
    pub reward_claimed: u64,
    pub reward_per_slot: u64,
    pub reward_per_share: u128,
    pub total_staked: u64,
    pub last_slot: u64,
    pub _reserved: [u8; 256],
}
```

مكافأة واحدة. قائم على الفتحات. أقدم جيل من البرنامج، محفوظ للمزارع RAY-USDC و SOL-USDC التي تسبق v5.

## `UserLedger` (v6) / `UserStake` (v5/v3)

الحالة لكل مستخدم، حساب واحد لكل زوج `(مزرعة، مستخدم)`. PDA بذرة:

```ts theme={null}
// v6
const [ledgerPda] = PublicKey.findProgramAddressSync(
  [farmId.toBuffer(), user.toBuffer(), Buffer.from("user_stake_info_v2")],
  FARM_V6_PROGRAM_ID,
);

// v5
const [stakePda] = PublicKey.findProgramAddressSync(
  [farmId.toBuffer(), user.toBuffer(), Buffer.from("user_stake_info")],
  FARM_V5_PROGRAM_ID,
);

// v3
const [stakePda] = PublicKey.findProgramAddressSync(
  [farmId.toBuffer(), user.toBuffer(), Buffer.from("staker_info")],
  FARM_V3_PROGRAM_ID,
);
```

(سلاسل البذور هي القيم المستخدمة بالفعل بواسطة SDK؛ إصدارات البرنامج قد غيرتها تاريخياً. تحقق مقابل مصدر v6 لأي شيء حساس أماناً.)

```rust theme={null}
// v6
pub struct UserLedger {
    pub version: u64,
    pub farm_id: Pubkey,
    pub owner: Pubkey,
    pub deposited: u64,                          // current stake
    pub reward_debts: [u128; 5],                 // snapshot of reward_per_share_x64 × deposited
}
```

الدين لكل تدفق هو تعويض المحاسبة الموصوف في نظرة عامة:

```
pending_for_stream_i = deposited × reward_per_share_x64[i] / 2^64  − reward_debts[i]
```

بعد كل `Deposit` أو `Withdraw` أو `Harvest`، يتم إعادة تعيين الدين إلى `deposited × reward_per_share_x64[i] / 2^64` الحالي.

## PDAs سلطة

```ts theme={null}
// v6
const [farmAuthorityV6] = PublicKey.findProgramAddressSync(
  [farmId.toBuffer()],
  FARM_V6_PROGRAM_ID,
);

// v5
const [farmAuthorityV5] = PublicKey.findProgramAddressSync(
  [farmId.toBuffer()],
  FARM_V5_PROGRAM_ID,
);

// v3
const [farmAuthorityV3] = PublicKey.findProgramAddressSync(
  [farmId.toBuffer()],
  FARM_V3_PROGRAM_ID,
);
```

جميع الإصدارات الثلاثة تشتق سلطة المزرعة لكل مزرعة ببذرة واحدة. هذا PDA هو السلطة على خزانة التثبيت وعلى كل خزانة مكافأة. إنه يوقع كل نقل تقوم به المزرعة.

## الخزائن

الخزائن المثبتة والمكافأة عبارة عن حسابات SPL Token قياسية يكون `owner` الخاص بها هو PDA سلطة المزرعة. يتم تخزين العناوين على `FarmState` — لا تعيد الاشتقاق؛ اقرأها من الحالة. يجب تعطيل سلطات التجميد على عملة التثبيت لـ v5/v6 (يتحقق البرنامج).

ملاحظات Token-2022:

* **v3**: SPL Token فقط.
* **v5**: SPL Token فقط.
* **v6**: يدعم Token-2022 على كل من عملات التثبيت والمكافأة، محكوم على حقول `staking_token_program` / `reward_token_program`. رسوم النقل على عملات مكافأة Token-2022 يتم تحصيلها عند الإصدار (الخزانة → المستخدم).

## المراقبة و APR

لا تخزن المزارع APR على السلسلة. للحساب:

```
annualized_rewards_value_usd = reward_per_second × 86400 × 365 × reward_usd_price
tvl_usd                     = total_staked / 10^decimals × staking_mint_usd_price
apr                         = annualized_rewards_value_usd / tvl_usd
```

يسحب المستهلكون عادةً `staking_mint_usd_price` من المجمع الذي ينتمي إليه LP (عبر `api-v3.raydium.io/pools/info/ids`) و `reward_usd_price` من أي أوراكل أسعار.

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

* [`products/farm-staking/instructions`](/ar/products/farm-staking/instructions) — مرجع تعليمات لكل إصدار.
* [`products/farm-staking/code-demos`](/ar/products/farm-staking/code-demos) — التثبيت والحصاد وإنشاء المزارع عبر SDK.
* [`reference/program-addresses`](/ar/reference/program-addresses) — جميع معرفات البرامج الثلاثة.

المصادر:

* [وحدة `Farm` من Raydium SDK v2](https://github.com/raydium-io/raydium-sdk-V2)
* مصدر برنامج Farm v6 لم يُنشر حالياً كمستودع منفصل؛ IDL مجمعة في SDK في [`raydium-io/raydium-sdk-V2`](https://github.com/raydium-io/raydium-sdk-V2) تحت `src/raydium/farm/`.
