هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
لافتة الإصدار. جميع الأمثلة تستهدف
@raydium-io/raydium-sdk-v2@0.2.64-alpha مقابل Solana mainnet-beta، تم التحقق منها في 2026-09-09 — تم التحقق من كل اسم منشئ، واسم معامل، ونوع معامل أدناه مقابل ملفات src/raydium/farm/ من هذا الإصدار وضد raydium-sdk-V2-demo/src/farm. يقوم SDK بإرسال v3 / v5 / v6 داخليًا بناءً على مالك برنامج المزرعة؛ الأمثلة أدناه تفترض مزرعة v6. انظر reference/program-addresses للحصول على معرفات البرامج الثلاثة.أسماء طرق وحدة المزرعة ليست ما قد تتوقعه: لا توجد getFarmById ولا توجد setRewards. يتم الجلب عبر raydium.api.fetchFarmInfoById، وبناة تحرير المكافآت هي addNewRewardToken / addNewRewardsToken و restartReward / restartRewards.الإعداد
الأمثلة هنا تعكس الملفات فيraydium-sdk-V2-demo/src/farm. يتبع التمهيد config.ts.template من مستودع العرض التوضيحي:
جلب مزرعة حسب المعرّف
لا توجدraydium.farm.getFarmById. يبدأ كل عرض توضيحي للمزرعة من وحدة API، التي تُرجع شكل FormatFarmInfoOut المُطبّع الذي تأخذه deposit / withdraw / harvestAllRewards:
fetchFarmInfoById سلسلة معرّفات مفصولة بفواصل وتُرجع مصفوفة، لذا يمكن لاستدعاء واحد أن يملأ محفظة كاملة. إذا كنت بحاجة إلى مفاتيح الحساب الخام بدلاً من معلومات العرض، فإن raydium.api.fetchFarmKeysById({ ids }) تُرجع الأقبية والسلطات PDAs؛ يستدعيها SDK داخليًا لك داخل كل منشئ أدناه.
رهن رموز LP
المصدر:src/farm/stake.ts
المطالبة فقط (الحصاد)
المصدر:src/farm/harvest.ts
farmInfoList هو Record مفهرس حسب معرّف المزرعة، وليس مصفوفة، والمنشئ يُرجع معاملات متعددة — لذا يجب إعطاء execute sequentially: true:
txIds بدلاً من txId واحد.
بالنسبة لمزرعة واحدة، قم بالحصاد باستخدام اصطلاح amount: 0 — هذا ما يفعله src/farm/harvest.ts، في كل إصدار بما في ذلك v6:
إلغاء الرهن
المصدر:src/farm/unstake.ts
إنشاء مزرعة v6
المصدر:src/farm/createAmmFarm.ts و editAmmFarm.ts
تأخذ create كائن معلومات المجمع للمجمع الذي يتم رهن رموز LP الخاصة به (وليس رمز عاري)، وكل إدخال من rewardInfos هو FarmRewardInfo: { mint: PublicKey, perSecond: string, openTime: number, endTime: number, rewardType: "Standard SPL" | "Option tokens" }. الأوقات هي ثوانٍ عادية، و perSecond هي سلسلة، وليست BN. يتم تعيين programId افتراضيًا إلى برنامج v6، لذا نادرًا ما تمرره.
perSecondهو معدل الانبعاث في الثانية بالوحدات الخام لرمز المكافأة، يتم تمريره كسلسلة عشرية. يقوم SDK بحزمه في تمثيل النقطة الثابتة على السلسلة قبل الإرسال.- يجب أن تكون الميزانية الكاملة (
perSecond × (endTime − openTime)) موجودة في ATA المكافأة الخاصة بك —createتنقلها إلى قبو المكافأة بشكل ذري. - لا يتم دعم رموز المكافآت Token-2022 من قبل منشئي المزرعة في SDK في إصدار SDK هذا؛ استخدم رمز SPL عادي للمكافآت.
- يمكنك بذر ما يصل إلى 5 مكافآت في استدعاء
createواحد. تنمو قائمة الحساب بمقدار(reward_mint, reward_vault, sender_ata, token_program)لكل تدفق إضافي؛ كن على دراية بحد حجم المعاملة 1232 بايت. بالنسبة لـ 4+ مكافآت، قم بالإنشاء بـ 1–2 واستخدمaddNewRewardsTokenفي المعاملات اللاحقة.
إضافة تدفق مكافأة جديد
لا توجدraydium.farm.setRewards. المنشئان اللذان يغيران مكافآت المزرعة هما addNewRewardToken / addNewRewardsToken (احتل فتحة حرة برمز جديد) و restartReward / restartRewards (أعد تسليح فتحة انتهى تدفقها). كلاهما يأخذ كائنات FarmRewardInfo بنفس الشكل الذي تستخدمه create.
perSecond × duration) من ATA الدافع كجزء من المعاملة. التعليمة الأساسية لا يمكنها تقصير التدفق، ولا يمكنها خفض per_second على تدفق مباشر، ولا يمكنها تغيير رمز المكافأة للفتحة — لتبديل الرموز، انتظر end_time واستخدم addNewRewardsToken على فتحة محررة، أو أنشئ مزرعة جديدة.
إعادة تشغيل تدفق منتهٍ
المصدر:src/farm/editAmmFarm.ts
تأخذ restartRewards newRewardInfos (جمع، مصفوفة)؛ restartReward هي الشكل ذو العنصر الواحد وتأخذ newRewardInfo. حقل الرمز هو mint، وليس rewardMint، ويجب أن يطابق فتحة موجودة بالفعل على المزرعة — يبحث المنشئ عن الفتحة حسب الرمز ويرمي خطأ إذا كانت غائبة.
restartRewards هي v6 فقط — يقرأ المنشئ معرّف برنامج المزرعة ويرمي خطأ لمزارع v3 / v5. صحيح فقط عندما يكون reward_state == 2 للفتحة المستهدفة (انتهى)؛ يجب أن يكون المتصل هو reward_sender للفتحة. لاحظ أن openTime >= endTime يتم رفضه من جانب العميل قبل إجراء أي RPC.
Rust CPI
تم نشر Farm v6 آخر مرة في 2024-05-13 وليس برنامج Anchor من وجهة نظر المدمج. إذا كنت بحاجة إلى التكوين معه من برنامجك الخاص على السلسلة، فقم بإنشاءInstruction يدويًا — اشتق قائمة الحساب ومميزات التعليمات بشكل مستقل (من تخطيطات TypeScript في SDK تحت raydium-sdk-V2/src/raydium/farm/، أو بفك تشفير المعاملات الحقيقية)، و invoke_signed لها. انظر sdk-api/rust-cpi لهذا الإجراء.
أيًا كان المسار الذي تسلكه، يجب أن تطابق ذيل remaining_accounts فتحات المكافآت النشطة للمزرعة 1-لـ-1 (أزواج من reward_vault_i، user_reward_ata_i بترتيب الفهرس). قد يؤدي حذف أو إساءة ترتيب هذه إلى سوء محاسبة صامت — سيقوم البرنامج بتحويل المبلغ الخاطئ.
الأخطاء الشائعة
- نسيان المطالبة قبل الانسحاب. غير ضار —
Withdrawتسوي المكافآت المعلقة أولاً. لكن إذا كان واجهة المستخدم الخاصة بك تعرض “مطالبة” بشكل منفصل عن “انسحاب”، قد يعتقد المستخدم أن هناك شيئًا آخر للمطالبة به بعدWithdraw. لا يوجد؛ تم دفع كل شيء متراكم حتى تلك النقطة. total_staked = 0أثناء الانبعاثات. يتم مصادرة الانبعاثات المتراكمة بينما لم يكن هناك شيء مرهون (تقسم صيغة تحديثreward_per_shareعلى 0 ويتخطى البرنامج التحديث). بالنسبة للبرامج ذاتopen_timeالمجدول، قم بتشغيل “رهن البذور” في open_time لتجنب هذا.- رسوم نقل Token-2022. على مزارع v6 برموز مكافآت Token-2022، تنطبق رسوم النقل عند الانبعاث (قبو → مستخدم). ضع هذا في الاعتبار في عروض APR.
per_secondصغير على v5. معدلu64في v5 يعني أن أيper_second < 1وحدة رمز في الثانية (على الرموز ذات ≥9 علامات عشرية هذا غالبًا ما يكون المعدل المطلوب) لا يمكن التعبير عنه — معدل التدفق يقرب إلى 0 والمزرعة لا تنبعث شيئًا. استخدم v6.
الخطوات التالية
products/farm-staking/instructions— مرجع التعليمات الأساسي.products/clmm/fees— قارن مع تدفقات المكافآت الأصلية لـ CLMM.user-flows/migrate-amm-v4-to-cpmm— غالبًا ما يكون مقترنًا بتشغيل مزرعة CPMM جديدة.
- Raydium SDK v2
- Farm v6 IDL مضمن في
raydium-io/raydium-sdk-V2تحتsrc/raydium/farm/.

