支付订阅
订阅授权是一个 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();}
注意事项
- 用户签署初始化交易。
- 为每个用户和代币铸造对创建一个订阅授权。
- 对同一铸造的后续委托重用现有的订阅授权。
- 赞助方可以为账户提供资金:向
initSubscriptionAuthority传入可选的payer(也支持createFixedDelegation、createRecurringDelegation和subscribe),或使用.use(payer(sponsorSigner))进行配置。rent 随后会在您使用匹配的receiver关闭时返还给该赞助方。若使用自筹资金的默认方式,则省略此项。 - 仅在依赖该订阅授权的所有委托均已撤销或关闭后,再关闭订阅授权。
Is this page helpful?