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

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.

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

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

الحسابالمالكالغرض
FarmStateبرنامج المزرعة (v3/v5/v6)الحالة الجذرية: عملة التثبيت، إجمالي المثبت، تدفقات المكافآت.
farm_authorityبرنامج المزرعةPDA تمتلك خزانة التثبيت وخزائن المكافآت.
staking_vaultSPL 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 هو الإصدار الحالي. هيكل حسابه هو الأكثر عمومية.
// 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

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

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 بذرة:
// 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 لأي شيء حساس أماناً.)
// 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 سلطة

// 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 من أي أوراكل أسعار.

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

المصادر: