PłatnościSubskrypcje

Tworzenie uprawnień subskrypcji

Uprawnienie subskrypcji to PDA, którego program używa jako delegata tokena SPL dla konta tokenów jednego użytkownika i jednego tokena mint. Utwórz je przed tworzeniem stałych delegacji, cyklicznych delegacji lub subskrypcji planu subskrypcji dla tego tokena mint.

Konto tokenów użytkownika musi już istnieć. Inicjalizacja tworzy PDA uprawnień subskrypcji i zatwierdza je jako delegata tokena na koncie tokenów użytkownika.

Tworzenie uprawnień

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();
}

Uwagi

  • Użytkownik podpisuje transakcję inicjalizacyjną.
  • Twórz jeden Subscription Authority na parę użytkownik–mint tokena.
  • Ponownie używaj istniejącego Subscription Authority dla późniejszych delegacji na tym samym mincie.
  • Sponsor może zasilić konto: przekaż opcjonalne payer do initSubscriptionAuthority (obsługiwane również w createFixedDelegation, createRecurringDelegation oraz subscribe), lub skonfiguruj jeden za pomocą .use(payer(sponsorSigner)). Rent jest następnie zwracany temu sponsorowi po zamknięciu z pasującym receiver. Pomiń to, aby użyć domyślnego trybu samodzielnego finansowania.
  • Zamykaj Subscription Authority dopiero po odwołaniu lub zamknięciu każdej delegacji, która od niego zależy.

Is this page helpful?

Spis treści

Edytuj stronę