支付订阅
委托和订阅持有的 rent 通常在撤销时返还给其记录的付款方。如果赞助方为账户提供了资金,而用户随后关闭或替换了其订阅授权,该账户将被搁置,其 rent 也将被锁定。RevokeAbandonedDelegation
和 RevokeAbandonedSubscription 允许记录的付款方将其收回。
适用场景
仅在账户的订阅授权被证明已终止时才允许操作——已关闭,或已关闭并重新创建(因此
init_id 不再匹配)。处于活跃状态的委托或订阅永远无法通过此方式关闭。
RevokeAbandonedDelegation | RevokeAbandonedSubscription | |
|---|---|---|
| 关闭对象 | 固定或循环委托 PDA | 订阅 PDA |
| 签名者 | 记录的付款方 | 记录的付款方 |
| 账户 | 委托 + 记录的授权 | 订阅 + 记录的授权 + 计划 |
| 适用条件 | 授权已关闭,或已重新创建(init_id 不匹配) | 对计划的铸币同上——铸币从绑定计划中读取,因此无法以无关授权替代来强制关闭 |
| 以下情况请改用普通撤销 | 委托已过期或已全额使用 | 订阅已取消并过期 |
RevokeAbandonedDelegation
也是记录的付款方对从未过期的委托(expiry_ts == 0)且未全额使用时的唯一恢复途径:普通撤销仅在过期时(或对于固定委托,在全额使用时)才会为付款方触发。
撤销已废弃的委托
由记录的付款方签名。传入已失效的委托 PDA 及其记录的订阅授权(该授权可能已关闭)。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、其记录的订阅授权方(可能已关闭),以及该订阅所属的方案。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,});
注意事项
- 签名方为已记录的付款人,而非委托人、被委托人或订阅者。
- 若该账户的订阅授权方仍处于活跃状态,两条指令均会失败——请改用普通撤销方式。
RevokeAbandonedDelegation适用于固定委托和周期性委托。
Is this page helpful?