ПлатежиПодписки
Subscription Authority — это PDA, который программа использует в качестве делегата SPL Token для token account одного пользователя и одного токена. Создайте его перед созданием фиксированных делегирований, регулярных делегирований или подписок на планы подписки для этого токена.
Token account пользователя уже должен существовать. Инициализация создает PDA Subscription Authority и утверждает его в качестве делегата токена в token account пользователя.
Создание Authority
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();}
Примечания
- Пользователь подписывает транзакцию инициализации.
- Создавайте один Subscription Authority для каждой пары «пользователь и токен».
- Используйте существующий Subscription Authority для последующих делегирований того же токена.
- Закрывайте Subscription Authority только после того, как все зависящие от него делегирования будут отозваны или закрыты.
Is this page helpful?