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

Отзыв заброшенных делегирований и подписок

Делегирования и подписки удерживают rent, который при отзыве обычно возвращается записанному плательщику. Если спонсор пополнил аккаунт, а пользователь впоследствии закрыл или заменил свой Subscription Authority, аккаунт оказывается заброшенным, а его rent — заблокированным. RevokeAbandonedDelegation и RevokeAbandonedSubscription позволяют записанному плательщику вернуть его.

Когда это применяется

Разрешено только в том случае, если Subscription Authority аккаунта явно недействителен — закрыт или закрыт и пересоздан (так что init_id больше не совпадает). Активное делегирование или подписка никогда не могут быть закрыты таким способом.

RevokeAbandonedDelegationRevokeAbandonedSubscription
ЗакрываетPDA фиксированного или повторяющегося делегированияPDA подписки
ПодписантЗаписанный плательщикЗаписанный плательщик
АккаунтыДелегирование + записанный authorityПодписка + записанный authority + план
Условие примененияAuthority закрыт или пересоздан (несовпадение init_id)То же, для mint плана — mint считывается из привязанного плана, поэтому подставить несвязанный authority для принудительного закрытия невозможно
Вместо этого используйте обычный отзыв, еслиДелегирование истекло или полностью потраченоПодписка отменена и истекла

RevokeAbandonedDelegation — также единственный способ восстановления для записанного плательщика в случае бессрочного делегирования (expiry_ts == 0), которое не было полностью потрачено: обычный отзыв для плательщика срабатывает только по истечении срока или, для фиксированного делегирования, при полном израсходовании.

Отзыв заброшенного делегирования

Записанный плательщик подписывает транзакцию. Передайте недействительный PDA делегирования и его записанный Subscription Authority (который может быть уже закрыт). Rent возвращается плательщику.

import { getRevokeAbandonedDelegationInstruction } from '@solana/subscriptions';
// Build the instruction and send it in a transaction like any other.
const revokeAbandonedIx = getRevokeAbandonedDelegationInstruction({
payer: payerSigner,
delegationAccount: delegationPda,
subscriptionAuthority: subscriptionAuthorityPda,
});

Отзыв заброшенной подписки

Подписавшийся плательщик подписывает транзакцию. Передайте PDA заброшенной подписки, её зафиксированный Subscription Authority (который к этому моменту может быть уже закрыт), и план, к которому принадлежит подписка. rent возвращается плательщику.

import { getRevokeAbandonedSubscriptionInstruction } from '@solana/subscriptions';
// Build the instruction and send it in a transaction like any other.
const revokeAbandonedIx = getRevokeAbandonedSubscriptionInstruction({
payer: payerSigner,
subscriptionAccount: subscriptionPda,
subscriptionAuthority: subscriptionAuthorityPda,
planPda,
});

Примечания

  • Транзакцию подписывает зафиксированный плательщик, а не делегатор, делегат или подписчик.
  • Оба инструкции завершатся ошибкой, если Subscription Authority всё ещё активен для аккаунта — в таком случае используйте обычный отзыв.
  • RevokeAbandonedDelegation работает как для фиксированных, так и для периодических делегирований.

Is this page helpful?

Содержание

Редактировать страницу