支付订阅
订阅授权是程序用作用户代币账户的 SPL Token 委托的 PDA。当用户不再拥有针对该铸币的活跃固定委托、循环委托或订阅委托时,请关闭它。
关闭操作会将账户的rent返还给其资助者(用户或支付费用的付款方)。请先关闭所有活跃的委托授权。
关闭操作不会清除 SPL Token 的委托授权。一旦 PDA 被删除,该授权将失效,但它仍会保留在 token account 上,直到被撤销——请参阅撤销委托授权。
关闭授权账户
import { address, createClient } from '@solana/kit';import { solanaLocalRpc } from '@solana/kit-plugin-rpc';import { signer } from '@solana/kit-plugin-signer';import {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 [subscriptionAuthorityPda] = await findSubscriptionAuthorityPda({user: userSigner.address,tokenMint,});await client.subscriptions.instructions.closeSubscriptionAuthority({user: userSigner,tokenMint,// Include this only when a sponsor funded the Subscription Authority.receiver: sponsorSigner.address,}).sendTransaction();
撤销委托授权
RevokeSubscriptionAuthority 用于清除用户 token
account 上残留的委托授权。它调用 Token Program 的 Revoke
指令,由用户签名,因此无论订阅授权账户是否仍然存在,均可正常执行。可单独发送,也可与
CloseSubscriptionAuthority 一起发送。
请传入拥有该铸币账户的 Token Program:SPL Token 铸币账户使用
TOKEN_PROGRAM_ADDRESS,Token-2022 铸币账户使用来自
@solana-program/token-2022 的 TOKEN_2022_PROGRAM_ADDRESS。
import { TOKEN_PROGRAM_ADDRESS } from '@solana-program/token';await client.subscriptions.instructions.revokeSubscriptionAuthority({user: userSigner,tokenMint,tokenProgram: TOKEN_PROGRAM_ADDRESS,}).sendTransaction();
注意事项
- 用户需对关闭交易进行签名。
- 如果某赞助方资助了订阅授权账户,请将该赞助方账户作为
receiver传入,以便将rent返还给记录在案的付款方。 - 在关闭订阅授权账户之前,请先关闭固定、周期性及订阅委托类型的 PDA。
- 如果用户后续创建新的委托授权,请为同一铸币账户初始化新的订阅授权账户。
- 关闭操作不会清除 token 委托授权,请使用
RevokeSubscriptionAuthority将其从用户的 token account 中移除。
Is this page helpful?