Une Autorité de Souscription est le PDA que le programme utilise comme délégué de jeton SPL pour le compte de jetons d'un utilisateur. Fermez-la lorsque l'utilisateur n'a plus de délégations fixes actives, de délégations récurrentes ou de délégations de souscription pour ce mint.
La fermeture restitue le rent du compte à son financeur (l'utilisateur ou le payeur qui l'a financé). Fermez d'abord toutes les délégations actives.
La fermeture n'efface pas l'approbation de délégation du token SPL. Une fois le PDA supprimé, l'approbation est inactive, mais elle reste sur le token account jusqu'à sa révocation — voir Révoquer l'approbation de délégation.
Fermer l'autorité
import { address, createClient } from '@solana/kit';import { solanaLocalRpc } from '@solana/kit-plugin-rpc';import { signer } from '@solana/kit-plugin-signer';import {findSubscriptionAuthorityPda,subscriptionsProgram,} from '@solana/subscriptions';const client = createClient().use(signer(userSigner)).use(solanaLocalRpc({ rpcUrl: 'http://127.0.0.1:8899' })).use(subscriptionsProgram());const tokenMint = address('TOKEN_MINT_ADDRESS_HERE');const [subscriptionAuthorityPda] = await findSubscriptionAuthorityPda({user: userSigner.address,tokenMint,});await client.subscriptions.instructions.closeSubscriptionAuthority({user: userSigner,tokenMint,// Include this only when a sponsor funded the Subscription Authority.receiver: sponsorSigner.address,}).sendTransaction();
Révoquer l'approbation de délégation
RevokeSubscriptionAuthority efface l'approbation de délégation résiduelle du
token account de l'utilisateur. Il appelle Revoke du Token Program, signé par
l'utilisateur, ce qui fonctionne que l'autorité d'abonnement existe encore ou
non. Envoyez-le seul ou conjointement avec CloseSubscriptionAuthority.
Passez le Token Program propriétaire du mint : TOKEN_PROGRAM_ADDRESS pour les
mints SPL Token, ou TOKEN_2022_PROGRAM_ADDRESS (depuis
@solana-program/token-2022) pour les mints Token-2022.
import { TOKEN_PROGRAM_ADDRESS } from '@solana-program/token';await client.subscriptions.instructions.revokeSubscriptionAuthority({user: userSigner,tokenMint,tokenProgram: TOKEN_PROGRAM_ADDRESS,}).sendTransaction();
Remarques
- L'utilisateur signe la transaction de fermeture.
- Si un sponsor a financé l'autorité d'abonnement, passez ce compte sponsor en
tant que
receiverafin que le rent soit restitué au payeur enregistré. - Fermez les PDAs de délégation fixe, récurrente et d'abonnement avant de fermer l'autorité d'abonnement.
- Si l'utilisateur crée une nouvelle délégation ultérieurement, initialisez une nouvelle autorité d'abonnement pour le même mint.
- La fermeture n'efface pas l'approbation de délégation du token. Utilisez
RevokeSubscriptionAuthoritypour la supprimer du token account de l'utilisateur.
Is this page helpful?