ПлатежиПодписки

Закрытие полномочий подписки

Полномочия подписки — это PDA, который программа использует в качестве делегата SPL Token для аккаунта токенов пользователя. Закрывайте его, когда у пользователя больше нет активных фиксированных делегирований, повторяющихся делегирований или делегирований подписки для этого минта.

Закрытие возвращает rent аккаунта его финансисту (пользователю или тому, кто его финансировал). Сначала закройте все активные делегирования.

Закрытие не очищает разрешение делегата SPL Token. После удаления PDA разрешение становится недействительным, однако остаётся на token account до тех пор, пока не будет отозвано — см. Отзыв разрешения делегата.

Закрытие Authority

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 пользователя. Функция вызывает Revoke Token Program, подписанный пользователем, поэтому работает независимо от того, существует ли Subscription Authority. Отправляйте отдельно или вместе с CloseSubscriptionAuthority.

Передайте Token Program, которой принадлежит минт: TOKEN_PROGRAM_ADDRESS для минтов SPL Token или TOKEN_2022_PROGRAM_ADDRESS (из @solana-program/token-2022) для минтов Token-2022.

import { TOKEN_PROGRAM_ADDRESS } from '@solana-program/token';
await client.subscriptions.instructions
.revokeSubscriptionAuthority({
user: userSigner,
tokenMint,
tokenProgram: TOKEN_PROGRAM_ADDRESS,
})
.sendTransaction();

Примечания

  • Пользователь подписывает транзакцию закрытия.
  • Если Subscription Authority финансировал спонсор, передайте аккаунт этого спонсора в качестве receiver, чтобы rent вернулся зарегистрированному плательщику.
  • Закройте PDA фиксированного, повторяющегося и подписочного делегирования перед закрытием Subscription Authority.
  • Если пользователь позднее создаст новое делегирование, инициализируйте новый Subscription Authority для того же минта.
  • Закрытие не очищает разрешение делегата токена. Используйте RevokeSubscriptionAuthority для его удаления из token account пользователя.

Is this page helpful?

Содержание

Редактировать страницу
Закрытие полномочий подписки | Solana