サブスクリプション委任プログラムは、開発者がユーザーに対して、明確な制限付きでウォレットからの将来のトークン転送を承認させることを可能にします。これは、定期的な支払い、サブスクリプション、加盟店による請求、およびユーザーが各転送に手動で署名する必要がないその他のフローのために設計されています。
目的
Solanaのtoken accountは、別の権限がトークンを移動することを承認できますが、各token accountは一度に1つの承認された権限のみを持つことができます。そのため、1つのウォレットが同じトークンに対して複数の支出取り決め(月額サブスクリプション、固定支出許容額、加盟店請求契約など)を安全にサポートすることが困難になります。
このプログラムは、各(user, token mint)ペアにプログラム制御されたサブスクリプション権限を付与することで、この問題を解決します。ユーザーのtoken
accountは、この権限を一度承認します。その後、プログラムは、要求された各転送を、誰が資金を引き出せるか、どれだけ引き出せるか、承認がいつ期限切れまたはリセットされるかを定義する個別の記録と照合します。
サブスクリプション権限は単独では資金を移動できません。転送は、ユーザーのアクティブな承認の1つと一致する場合にのみ成功します。
プログラムID
De1egAFMkMWZSN5rYXRj9CAdheBamobVNubTsi9avR44
プログラムIDはprogram/src/lib.rsで宣言されています。ローカルのSurfpoolワークフローは、この正規アドレスにプログラムをインストールします。
委任モデル
このプログラムは3つの承認モデルをサポートしています:
| モデル | 目的 |
|---|---|
| 固定委任 | 別のウォレットまたはサービスに、オプションで有効期限まで、固定された総額まで支出させます。 |
| 定期委任 | 別のウォレットまたはサービスに、毎日、毎週、または毎月など、期間ごとにリセットされる上限まで支出させます。 |
| サブスクリプションプラン | 加盟店が請求条件を公開し、ユーザーがそれを承認できるようにし、承認された徴収者が各請求期間にサブスクライバーに課金できるようにします。 |
サポートされているトークン
SPL TokenとToken-2022の両方のミントをすべてサポートしています。
TransferHookが設定されたToken-2022ミントの場合、プログラムは委任された転送ごとにミントのフックアカウント(フックプログラム、ExtraAccountMetaList
PDA、追加アカウント)をTransferChecked
CPIに転送するため、フックポリシーが適用されます。SDKがこれらを自動的に解決します:
- プラグインクライアント(
transferFixed、transferRecurring、transferSubscription)— 自動的に追加されます。 - 手動で構築する場合 —
resolveTransferHookAccountsを呼び出し、transferHookAccountsを渡します。
オンチェーンイベント
プログラムはself-CPIを通じてオンチェーンイベントを発行するため、インデクサーやアプリケーションがアクティビティを追跡できます。すべてのイベントは公開済みのIDLに登録されているため、生成されたクライアントがデコードできます。発行されるイベントは以下のとおりです:
FixedTransferEvent、RecurringTransferEvent、およびSubscriptionTransferEvent— 委任された転送ごとに1つ発行されます。それぞれクレジットされたreceiverTokenAccountを保持し、SubscriptionTransferEventはpullerも保持します。SubscriptionCreatedEvent、SubscriptionCancelledEvent、およびSubscriptionResumedEvent— サブスクリプションのライフサイクル。SubscriptionCreatedEventはpayerを保持します。PlanUpdatedEvent— プランが更新されたときに発行されます。
バージョニング
プログラムが所有するレコードにはバージョンフィールドが含まれています。これにより、既存のユーザーに影響を与えることなく、プログラムが時間の経過とともにアカウントデータをアップグレードするための手段が提供されます。移行戦略は以下をサポートしています:
- レイジーなインプレース更新
- 明示的な移行instructions
- 取り消しと再作成のフォールバック
コントリビューター
このプロジェクトはsolana-program/subscriptions リポジトリのコントリビューターによってメンテナンスされています。
監査状況
このプログラムはCantinaによって監査されています。監査状況、ベースラインコミット、修正確認済みコミット、および現在の未監査デルタは、リポジトリのaudits/ ディレクトリで追跡されています。
デモアプリケーション
プログラムを実際に試してみたい場合は、このセクションで説明した概念のエンドツーエンドの実装を確認できるサンプルアプリケーションはこちらをご覧ください。
Is this page helpful?