Una Autoridad de Suscripción es el PDA que el programa utiliza como delegado de Token SPL para la cuenta de tokens de un usuario. Ciérrela cuando el usuario ya no tenga delegaciones fijas activas, delegaciones recurrentes o delegaciones de suscripción para ese mint.
Cerrar la cuenta devuelve el rent al financiador (el usuario o el pagador que la financió). Revoca primero cualquier delegación activa.
El cierre no elimina la aprobación de delegado SPL Token. Una vez que el PDA desaparece, la aprobación queda inerte, pero permanece en el token account hasta que se revoque — consulta Revocar La Aprobación De Delegado.
Cerrar La Autoridad
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();
Revocar La Aprobación De Delegado
RevokeSubscriptionAuthority elimina la aprobación de delegado residual del
token account del usuario. Llama al Revoke del Token Program, firmado por el
usuario, por lo que funciona independientemente de si la Autoridad de
Suscripción sigue existiendo. Envíalo de forma independiente o junto con
CloseSubscriptionAuthority.
Pasa el Token Program que posee el mint: TOKEN_PROGRAM_ADDRESS para mints de
SPL Token, o TOKEN_2022_PROGRAM_ADDRESS (de @solana-program/token-2022) para
mints de Token-2022.
import { TOKEN_PROGRAM_ADDRESS } from '@solana-program/token';await client.subscriptions.instructions.revokeSubscriptionAuthority({user: userSigner,tokenMint,tokenProgram: TOKEN_PROGRAM_ADDRESS,}).sendTransaction();
Notas
- El usuario firma la transacción de cierre.
- Si un patrocinador financió la Autoridad de Suscripción, pasa esa cuenta de
patrocinador como
receiverpara que el rent sea devuelto al pagador registrado. - Cierra los PDAs de delegación fija, recurrente y de suscripción antes de cerrar la Autoridad de Suscripción.
- Si el usuario crea una nueva delegación más adelante, inicializa una nueva Autoridad de Suscripción para el mismo mint.
- Cerrar la cuenta no elimina la aprobación de delegado del token. Usa
RevokeSubscriptionAuthoritypara eliminarla del token account del usuario.
Is this page helpful?