Les délégations et les abonnements conservent du rent qui revient normalement à
leur payeur enregistré lors de la révocation. Si un sponsor a financé le compte
et que l'utilisateur ferme ou remplace ultérieurement son autorité d'abonnement,
le compte se retrouve bloqué et son rent est immobilisé.
RevokeAbandonedDelegation et RevokeAbandonedSubscription permettent au
payeur enregistré de le récupérer.
Cas d'application
Autorisé uniquement lorsque l'autorité d'abonnement du compte est manifestement
terminale — fermée, ou fermée et recréée (de sorte que init_id ne correspond
plus). Une délégation ou un abonnement actif ne peut jamais être clôturé de
cette manière.
RevokeAbandonedDelegation | RevokeAbandonedSubscription | |
|---|---|---|
| Clôture | PDA de délégation fixe ou récurrente | PDA d'abonnement |
| Signataire | Payeur enregistré | Payeur enregistré |
| Comptes | Délégation + autorité enregistrée | Abonnement + autorité enregistrée + plan |
| Éligible lorsque | Autorité fermée ou recréée (incompatibilité init_id) | Idem, pour le mint du plan — le mint est lu depuis le plan lié, donc une autorité non liée ne peut pas être substituée pour forcer une clôture |
| Utiliser la révocation ordinaire si | La délégation est expirée ou entièrement dépensée | L'abonnement est annulé et expiré |
RevokeAbandonedDelegation est également le seul moyen de récupération pour le
payeur enregistré dans le cas d'une délégation sans expiration
(expiry_ts == 0) qui n'est pas entièrement dépensée : la révocation ordinaire
ne s'exécute pour le payeur qu'à l'expiration ou, pour une délégation fixe, lors
d'une dépense totale.
Révoquer une délégation abandonnée
Le payeur enregistré signe. Transmettez le PDA de délégation inactif et son autorité d'abonnement enregistrée (qui peut déjà être fermée). Le rent est restitué au payeur.
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,});
Révoquer un abonnement abandonné
Le payeur enregistré signe. Transmettez le PDA de l'abonnement abandonné, son Subscription Authority enregistrée (qui peut déjà être fermée), ainsi que le plan auquel appartient l'abonnement. Le rent est retourné au payeur.
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,});
Remarques
- C'est le payeur enregistré qui signe, et non le délégant, le délégué ou l'abonné.
- Les deux instructions échouent si la Subscription Authority est toujours active pour le compte — utilisez plutôt la révocation ordinaire.
RevokeAbandonedDelegationfonctionne pour les délégations fixes et récurrentes.
Is this page helpful?