PagosSuscripciones

Crear Autoridad de Suscripción

Una Autoridad de Suscripción es una PDA que el programa utiliza como delegado de token SPL para la token account de un usuario y un token mint específico. Créala antes de crear delegaciones fijas, delegaciones recurrentes o suscripciones a planes de suscripción para ese mint.

La token account del usuario ya debe existir. La inicialización crea la PDA de Autoridad de Suscripción y la aprueba como delegado de token en la token account del usuario.

Crear la Autoridad

import { address, createClient } from '@solana/kit';
import { solanaLocalRpc } from '@solana/kit-plugin-rpc';
import { signer } from '@solana/kit-plugin-signer';
import { findAssociatedTokenPda, TOKEN_PROGRAM_ADDRESS } from '@solana-program/token';
import {
fetchMaybeSubscriptionAuthority,
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 [userAta] = await findAssociatedTokenPda({
mint: tokenMint,
owner: userSigner.address,
tokenProgram: TOKEN_PROGRAM_ADDRESS,
});
const [subscriptionAuthorityPda] = await findSubscriptionAuthorityPda({
user: userSigner.address,
tokenMint,
});
const subscriptionAuthority = await fetchMaybeSubscriptionAuthority(
client.rpc,
subscriptionAuthorityPda,
);
if (!subscriptionAuthority.exists) {
await client.subscriptions.instructions
.initSubscriptionAuthority({
tokenMint,
tokenProgram: TOKEN_PROGRAM_ADDRESS,
userAta,
})
.sendTransaction();
}

Notas

  • El usuario firma la transacción de inicialización.
  • Crea una Autoridad de Suscripción por cada par de usuario y token mint.
  • Reutiliza la Autoridad de Suscripción existente para delegaciones posteriores en el mismo mint.
  • Cierra la Autoridad de Suscripción solo después de que cada delegación que depende de ella haya sido revocada o cerrada.

Is this page helpful?

Tabla de Contenidos

Editar Página