订阅委托程序使开发者能够让用户授权未来从其钱包进行的代币转账,并设定明确的限制。它专为定期付款、订阅服务、商家账单以及其他用户无需手动签署每笔转账的流程而设计。
目的
Solana 代币账户可以授权另一个权限方转移代币,但每个代币账户一次只能拥有一个已批准的权限方。这使得一个钱包难以安全地支持同一代币的多个支出安排,例如月度订阅、固定支出额度和商家账单协议。
该程序通过为每个 (user, token mint)
配对提供一个由程序控制的订阅权限来解决这个问题。用户的代币账户只需授权该权限一次。然后,程序会根据单独的记录检查每个请求的转账,该记录定义了谁可以提取资金、可以提取多少资金,以及授权何时过期或重置。
订阅权限本身无法转移资金。只有当转账与用户的某个活跃授权匹配时,转账才会成功。
程序 ID
De1egAFMkMWZSN5rYXRj9CAdheBamobVNubTsi9avR44
程序 ID 在 program/src/lib.rs
中声明。本地 Surfpool 工作流会将程序安装在此规范地址。
委托模型
该程序支持三种授权模型:
| 模型 | 用途 |
|---|---|
| 固定委托 | 允许另一个钱包或服务支出最多固定总金额,可选择设置过期时间。 |
| 定期委托 | 允许另一个钱包或服务支出最多一个限额,该限额每个周期(如每日、每周或每月)重置。 |
| 订阅计划 | 允许商家发布用户可接受的账单条款,然后允许已批准的收款方在每个账单周期向订阅者收费。 |
支持的代币
该程序支持使用 SPL
Token 和 Token-2022 创建的代币。唯一被拒绝的 Token-2022 扩展是已配置的
TransferHook(其中钩子 authority 或 program_id 已设置)。惰性的
TransferHook(两者均未设置,因此永久不可变)以及所有其他扩展均被允许。
链上事件
该程序会发出链上事件,以便索引器和应用程序可以跟踪重要活动。这些事件涵盖了通过固定转账、定期转账和订阅计划流程进行的订阅变更和转账。
版本控制
程序拥有的记录包含版本字段。这为程序提供了一条随时间升级账户数据的路径,而不会影响现有用户。迁移策略支持:
- 延迟就地更新
- 显式迁移指令
- 撤销并重新创建回退
贡献者
该项目由
solana-program/subscriptions 仓库
的贡献者维护。
审计状态
该程序已由 Cantina 审计。审计状态、基线提交、修复验证提交以及当前未审计的差异均在仓库的
audits/ 目录
中进行跟踪。
演示应用程序
如果您想自己体验该程序,可以查看示例应用程序,了解本节所涵盖概念的完整端到端实现。
Is this page helpful?