支付订阅
订阅授权是一个 PDA,程序将其用作单个用户的 token account 和单个代币铸造的 SPL Token 委托。在为该铸造创建固定委托、循环委托或订阅计划订阅之前,请先创建它。
用户的 token account 必须已经存在。初始化会创建订阅授权 PDA,并将其批准为用户 token account 上的代币委托。
创建授权
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();}
注意事项
- 用户签署初始化交易。
- 为每个用户和代币铸造对创建一个订阅授权。
- 在同一铸造上进行后续委托时,重复使用现有的订阅授权。
- 仅在依赖于它的每个委托都已被撤销或关闭后,才关闭订阅授权。
Is this page helpful?