المدفوعاتالاشتراكات

إلغاء التفويضات والاشتراكات المهجورة واستعادة الـ rent

تحتفظ التفويضات والاشتراكات بالـ rent الذي يعود عادةً إلى الدافع المسجّل عند الإلغاء. إذا موّل راعٍ الحساب وقام المستخدم لاحقاً بإغلاق سلطة الاشتراك الخاصة به أو استبدالها، يصبح الحساب معلقاً ويتعذّر استرداد الـ rent الخاص به. يتيح كلٌّ من RevokeAbandonedDelegation وRevokeAbandonedSubscription للدافع المسجّل استعادته.

متى يُطبَّق

لا يُسمح بذلك إلا عندما تكون سلطة الاشتراك للحساب منتهية بشكل قاطع — مغلقة، أو مغلقة وأُعيد إنشاؤها (بحيث لم يعد init_id مطابقاً). لا يمكن إغلاق تفويض أو اشتراك نشط بهذه الطريقة أبداً.

RevokeAbandonedDelegationRevokeAbandonedSubscription
يُغلقPDA تفويض ثابت أو متكررPDA اشتراك
الموقّعالدافع المسجّلالدافع المسجّل
الحساباتالتفويض + السلطة المسجّلةالاشتراك + السلطة المسجّلة + الخطة
يكون مؤهلاً عندماالسلطة مغلقة، أو أُعيد إنشاؤها (عدم تطابق init_id)نفس الشرط، لعملة سك الخطة — يُقرأ عنوان السك من الخطة المرتبطة، لذلك لا يمكن استبدال سلطة غير ذات صلة لإجبار الإغلاق
استخدم الإلغاء العادي عوضاً عندماالتفويض منتهي الصلاحية أو مُستنفَد بالكاملالاشتراك ملغى ومنتهي الصلاحية

يُعدّ RevokeAbandonedDelegation أيضاً المسار الوحيد لاسترداد الدافع المسجّل للـ rent من تفويض لا تنتهي صلاحيته أبداً (expiry_ts == 0) ولم يُستنفَد بالكامل: إذ لا يُفعَّل الإلغاء العادي للدافع إلا عند انتهاء الصلاحية، أو عند الإنفاق الكامل في حالة التفويض الثابت.

إلغاء تفويض مهجور

يقوم الدافع المسجّل بالتوقيع. مرّر PDA التفويض المنتهي وسلطة الاشتراك المسجّلة الخاصة به (والتي قد تكون مغلقة بالفعل). يعود الـ rent إلى الدافع.

import { getRevokeAbandonedDelegationInstruction } from '@solana/subscriptions';
// Build the instruction and send it in a transaction like any other.
const revokeAbandonedIx = getRevokeAbandonedDelegationInstruction({
payer: payerSigner,
delegationAccount: delegationPda,
subscriptionAuthority: subscriptionAuthorityPda,
});

إلغاء اشتراك متروك

يوقّع الدافع المسجَّل. مرِّر PDA الخاص بالاشتراك المتروك، وسلطة الاشتراك المسجَّلة (التي قد تكون مغلقة بالفعل)، والخطة التي ينتمي إليها الاشتراك. يعود rent إلى الدافع.

import { getRevokeAbandonedSubscriptionInstruction } from '@solana/subscriptions';
// Build the instruction and send it in a transaction like any other.
const revokeAbandonedIx = getRevokeAbandonedSubscriptionInstruction({
payer: payerSigner,
subscriptionAccount: subscriptionPda,
subscriptionAuthority: subscriptionAuthorityPda,
planPda,
});

ملاحظات

  • يوقّع الدافع المسجَّل، وليس المفوِّض أو المفوَّض إليه أو المشترك.
  • يفشل كلا التعليمتين إذا كانت سلطة الاشتراك لا تزال نشطة للحساب — استخدم الإلغاء العادي بدلاً من ذلك.
  • RevokeAbandonedDelegation تعمل مع كلٍّ من التفويضات الثابتة والمتكررة.

Is this page helpful?

جدول المحتويات

تعديل الصفحة