Las delegaciones y suscripciones retienen rent que normalmente se devuelve a su
pagador registrado al revocarlas. Si un patrocinador financió la cuenta y el
usuario posteriormente cierra o reemplaza su Autoridad de Suscripción, la cuenta
queda abandonada y su rent bloqueada. RevokeAbandonedDelegation e
RevokeAbandonedSubscription permiten que el pagador registrado la recupere.
Cuándo Aplica
Solo se permite cuando la Autoridad de Suscripción de la cuenta es
demostrablemente terminal — cerrada, o cerrada y recreada (de modo que init_id
ya no coincide). Una delegación o suscripción activa nunca puede cerrarse de
esta manera.
RevokeAbandonedDelegation | RevokeAbandonedSubscription | |
|---|---|---|
| Cierra | PDA de delegación fija o recurrente | PDA de suscripción |
| Firmante | Pagador registrado | Pagador registrado |
| Cuentas | Delegación + autoridad registrada | Suscripción + autoridad registrada + plan |
| Elegible cuando | Autoridad cerrada o recreada (discrepancia en init_id) | Lo mismo, para el mint del plan — el mint se lee del plan vinculado, por lo que no se puede sustituir una autoridad no relacionada para forzar el cierre |
| Usar revocación ordinaria cuando | La delegación está vencida o totalmente gastada | La suscripción está cancelada y vencida |
RevokeAbandonedDelegation es también el único camino de recuperación del
pagador registrado para una delegación que nunca vence (expiry_ts == 0) y que
no está completamente gastada: la revocación ordinaria se activa para el pagador
solo al vencer o, en el caso de una delegación fija, al gastarse por completo.
Revocar una Delegación Abandonada
El pagador registrado firma. Se pasa el PDA de la delegación inactiva y su Autoridad de Suscripción registrada (que puede ya estar cerrada). El rent se devuelve al pagador.
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,});
Revocar una Suscripción Abandonada
El pagador registrado firma. Pasa el PDA de la suscripción abandonada, su Autoridad de Suscripción registrada (que puede que ya esté cerrada) y el plan al que pertenece la suscripción. El rent se devuelve al pagador.
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,});
Notas
- El pagador registrado firma, no el delegante, el delegado ni el suscriptor.
- Ambas instrucciones fallan si la Autoridad de Suscripción sigue activa para la cuenta — usa la revocación ordinaria en su lugar.
RevokeAbandonedDelegationfunciona tanto para delegaciones fijas como recurrentes.
Is this page helpful?