支付订阅

关闭订阅授权

订阅授权是程序用作用户代币账户的 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-2022TOKEN_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?

Table of Contents

Edit Page
©️ 2026 Solana 基金会版权所有