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

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.

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

فهرس التعليمات

الغرضv3v5v6
إنشاء مزرعةCreateFarmCreateFarmCreateFarm
إضافة دفتر أستاذ المستخدم (قد يكون ضمنيًا)CreateUserLedgerCreateAssociatedLedgerضمني في Deposit
StakingDepositDepositDeposit
UnstakingWithdrawWithdrawWithdraw
المطالبة بالمكافآت فقطغير متاح (استخدم Deposit 0)غير متاح (استخدم Deposit 0)Harvest
إضافة تدفق مكافأة بعد الإنشاءغير متاحAddRewardAddReward
تعديل تدفق مكافأة موجودغير متاحSetRewardsSetRewards
إعادة تشغيل مكافأة بعد end_timeغير متاحRestartRewardsRestartRewards
سحب ميزانية المكافآت غير المطالب بها (المسؤول)غير متاحWithdrawRewardWithdrawReward
على v3 و v5، الطريقة الموصى بها للمطالبة بالمكافآت دون تغيير الحصة هي استدعاء Deposit مع amount = 0. يتعامل البرنامج مع هذا كتسوية بحتة. أدخل v6 Harvest صريح لتوضيح الأمور. يجرّد SDK كل هذا خلف raydium.farm.deposit({ ... }) وما إلى ذلك. تتناول الأقسام أدناه قوائم الحسابات الأساسية للمدمجين الذين يحتاجون إلى بناء التعليمات يدويًا (المجمعات وأدوات المراقبة وملحقات SDK).

CreateFarm (v6)

إنشاء مزرعة v6 جديدة. الوسائط
reward_info_count: u8               // عدد تدفقات المكافآت عند الإنشاء (1..=5)
reward_infos: [
  {
    open_time:            u64,
    end_time:             u64,
    emission_per_second_x64: u128,   // Q64.64
    mint:                 Pubkey,    // نعناع المكافأة
    token_program:        Pubkey,    // SPL أو Token-2022
  }
]
الحسابات (موجزة، ل reward_info_count = 1)
#الاسمWSملاحظات
1creatorWSيدفع الإيجار، يمتلك المزرعة.
2farm_stateWحساب FarmState جديد.
3farm_authorityPDA [farm_id].
4staking_mint
5staking_vaultWتم إنشاؤه كـ ATA للسلطة أو منجم PDA.
6staking_token_program
7reward_mint
8reward_vaultWسيستقبل الميزانية الأولية.
9reward_token_program
10reward_sender_ataWATA المُنشئ على نعناع المكافأة؛ يتم استنزافه بواسطة هذه التعليمة.
11system_program
12token_program
13associated_token_program
14rent
الشروط المسبقة
  • open_time > now، end_time > open_time.
  • ATAs المنشئ تحتفظ بما لا يقل عن emission_per_second_x64 × (end_time − open_time) / 2^64 من نعناع المكافأة.
  • لا يحتوي staking_mint على سلطة تجميد، أو يتم تعطيل سلطة التجميد.
الشروط اللاحقة
  • تم تهيئة FarmState، total_staked = 0.
  • تم تمويل منجم (منجم) المكافآت بميزانية التدفق الكاملة.
  • تم استنزاف ATA المكافأة للمُنشئ بهذا المبلغ.

Deposit (v6)

Stake amount من نعناع الحصة. الوسائط
amount: u64
الحسابات
#الاسمWS
1userWS
2user_ledgerW
3farm_stateW
4farm_authority
5staking_vaultW
6user_staking_ataW
7..(7+n)reward_vault_{i}W
user_reward_ata_{i}W
last−2system_program
last−1token_program
lastassociated_token_program
إذا كان user_ledger غير موجود، يضيف SDK بادئة CreateAccount-style ix؛ يمكن لبرنامج v6 أيضًا إنشاؤه بكسل مرة واحدة بالنظر إلى حساب البرنامج النظامي. نمط الحسابات المتبقية: لكل مكافأة نشطة، أضف (reward_vault, user_reward_ata) حتى تتمكن التسوية من الدفع. التأثير
  1. تحديث reward_per_share_x64[i] لكل تدفق مكافأة نشط باستخدام صيغة التحديث الكسول.
  2. حساب pending_i = user_ledger.deposited × reward_per_share_x64[i] / 2^64 − user_ledger.reward_debts[i].
  3. نقل pending_i من reward_vault_{i} إلى user_reward_ata_{i}.
  4. نقل amount نعناع الحصة من user_staking_ata إلى staking_vault.
  5. تحديث user_ledger.deposited += amount وإعادة التقاط reward_debts[i].
  6. تحديث farm_state.total_staked += amount.
الشروط المسبقة
  • amount > 0 للحصة الحقيقية (v6 يمنع amount = 0 — استخدم Harvest للمطالبة فقط).
  • يحتفظ user_staking_ata بـ amount على الأقل.
  • يحتفظ كل منجم مكافأة نشط بـ pending المستحق لهذا المستخدم على الأقل.

Withdraw (v6)

Unstake amount. الوسائط
amount: u64
الحسابات — مطابقة لـ Deposit. التأثير — نفس التسوية مثل Deposit، ثم نقل نعناع الحصة مرة أخرى للمستخدم: staking_vault → user_staking_ata. ينخفض كل من total_staked و user_ledger.deposited. الشروط المسبقة
  • amount ≤ user_ledger.deposited.
  • المزرعة لم تتوقف عن العمل.

Harvest (v6)

المطالبة بالمكافآت المعلقة دون تغيير الحصة. الوسائط — لا توجد. الحسابات — نفس Deposit، بدون حركة على جانب الحصة. التأثير — تحديث reward_per_share_x64[i]، دفع pending_i، إعادة التقاط reward_debts[i]. بدون تغيير في total_staked أو deposited.

AddReward (v5/v6)

إضافة تدفق مكافأة جديد إلى مزرعة موجودة بها فتحة غير مستخدمة. الوسائط
reward_info: {
  open_time:            u64,
  end_time:             u64,
  emission_per_second_x64: u128,
  mint:                 Pubkey,
  token_program:        Pubkey,
}
الشروط المسبقة
  • توجد فتحة حرة (reward_info_count < 5 على v6، < 2 على v5).
  • open_time ≥ now (قد يكون في المستقبل) أو يُسمح بـ open_time < now فقط إذا سمح برنامج الإصدار — v6 يفعل، v5 لا.
الشروط اللاحقة
  • تم تهيئة التدفق الجديد في الفهرس reward_info_count، reward_info_count++.
  • يتم جمع منجم المكافأة بميزانية التدفق الكاملة من ATA المستدعي.
خطأ شائعRewardAlreadyExists إذا تضارب النعناع مع فتحة موجودة.

SetRewards (v5/v6)

توسيع أو زيادة تدفق مكافأة موجود. لا يمكن تغيير النعناع؛ لا يمكن تقصير end_time؛ لا يمكن خفض emission_per_second_x64 بمجرد تشغيله. الوسائط
reward_index:         u8
new_open_time:        u64,
new_end_time:         u64,
new_emission_per_second_x64: u128,
الشروط المسبقة
  • التدفق لا يزال قيد التشغيل (reward_state == 1).
  • new_end_time ≥ current end_time.
  • الميزانية الإضافية المطلوبة (new_emission × new_duration − already_emissioned) موجودة في ATA المُرسل ويتم نقلها إلى منجم المكافأة بواسطة التعليمة.
على v5، المكالمة المكافئة هي SetRewards مع مجموعة وسائط أصغر (بدون تغييرات في الثانية على التدفقات النشطة).

RestartRewards (v5/v6)

إعادة تشغيل تدفق بعد مرور end_time. من الناحية المفاهيمية، نفس AddReward لنعناع يحتوي بالفعل على فتحة. الوسائط — شكل متطابق لـ AddReward في هذا الفهرس. الشروط المسبقة
  • reward_state == 2 (انتهى).
  • المستدعي هو reward_sender للفتحة (v6) أو مالك المزرعة (v5).

WithdrawReward (v5/v6)

تنظيف إداري لرصيد منجم المكافآت غير المطالب به بعد انتهاء التدفق وحصول جميع المراهنين على فرصة للحصاد. الوسائط
reward_index: u8
الشروط المسبقة
  • التدفق انتهى (reward_state == 2).
  • reward_total_emissioned == reward_claimed + vault_balance (لا شيء مستحق حاليًا).
التأثير — نقل الباقي إلى reward_sender_ata. لا يمنع البرنامج السحب بينما لا يزال لدى المراهنين مطالبات معلقة؛ يُتوقع من المسؤول حصاد نيابة عن المراهنين المتأخرين أولاً (أو السماح لهم بالحصاد). إذا قمت بالمسح مبكرًا، يفقد المستخدمون الوصول إلى مكافآتهم غير المطالب بها. لا تستدعِ هذا مبكرًا.

تباينات v5

  • Deposit و Withdraw لهما نفس الشكل مثل v6 لكنهما يستخدمان ما يصل إلى 2 فتحة مكافآت و reward_per_share هو u128 (نقطة ثابتة بأساس مختلف).
  • CreateAssociatedLedger مكالمة منفصلة مطلوبة قبل أول Deposit؛ دمج v6 هذا.
  • AddReward متاح، Harvest ليس كذلك (استخدم Deposit 0).

تباينات v3

  • تدفق مكافأة واحد. لا AddReward، لا فتحة ثانية.
  • Deposit 0 هو الطريقة الوحيدة للمطالبة.
  • يجب استدعاء CreateUserLedger قبل أول Deposit.

مصفوفة تغيير الحالة

التعليمةtotal_stakeduser.depositedreward_per_shareمناجم المكافآت
CreateFarm00ممول من قبل المنشئ
Deposit(n)+n+nتحديث−pending (مدفوع)
Withdraw(n)−n−nتحديث−pending
Harvestتحديث−pending
AddReward+ميزانية جديدة
SetRewards+ميزانية دلتا
RestartRewards+ميزانية
WithdrawReward−باقي

الخطوات التالية

المصادر: