支付订阅

创建订阅授权

订阅授权是一个 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?

Table of Contents

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