Делегування та підписки утримують rent, який зазвичай повертається зафіксованому
платнику під час відкликання. Якщо спонсор фінансував обліковий запис, а
користувач пізніше закрив або замінив свій Subscription Authority, обліковий
запис залишається покинутим, а його rent — заблокованим.
RevokeAbandonedDelegation та RevokeAbandonedSubscription дозволяють
зафіксованому платнику повернути його.
Коли це застосовується
Дозволено лише тоді, коли Subscription Authority облікового запису є доведено
кінцевим — закритим або закритим і відтвореним (тобто init_id більше не
збігається). Активне делегування або підписку неможливо закрити таким чином.
RevokeAbandonedDelegation | RevokeAbandonedSubscription | |
|---|---|---|
| Закриває | PDA фіксованого або повторюваного делегування | PDA підписки |
| Підписант | Зафіксований платник | Зафіксований платник |
| Облікові записи | Делегування + зафіксований authority | Підписка + зафіксований authority + план |
| Умова прийнятності | Authority закрито або відтворено (невідповідність init_id) | Те саме — для mint плану; mint зчитується зі зв'язаного плану, тому непов'язаний authority не може бути підставлений для примусового закриття |
| Використовуйте звичайне відкликання, якщо | Делегування є простроченим або повністю витраченим | Підписку скасовано та прострочено |
RevokeAbandonedDelegation також є єдиним способом відновлення для
зафіксованого платника у випадку делегування без терміну дії (expiry_ts == 0),
яке не витрачено повністю: звичайне відкликання спрацьовує для платника лише
після закінчення терміну або, у випадку фіксованого делегування, після повного
витрачання.
Відкликання покинутого делегування
Зафіксований платник підписує. Передайте покинутий PDA делегування та його зафіксований Subscription Authority (який може вже бути закритим). 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 покинутої підписки, її зареєстрований Authority підписки (який може бути вже закритий) і план, до якого належить підписка. 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,});
Примітки
- Підписує зареєстрований платник, а не делегатор, делегат або підписник.
- Обидві інструкції завершуються помилкою, якщо Authority підписки все ще активний для облікового запису — замість цього використовуйте звичайне відкликання.
RevokeAbandonedDelegationпрацює як для фіксованих, так і для повторюваних делегувань.
Is this page helpful?