Le programme de délégation d'abonnements permet aux développeurs de laisser les utilisateurs autoriser de futurs transferts de jetons depuis leurs portefeuilles avec des limites claires. Il est conçu pour les paiements récurrents, les abonnements, la facturation marchande et autres flux où un utilisateur ne devrait pas avoir à signer manuellement chaque transfert.
Objectif
Les token accounts Solana peuvent approuver une autre autorité pour déplacer des jetons, mais chaque token account ne peut avoir qu'une seule autorité approuvée à la fois. Cela rend difficile pour un portefeuille de prendre en charge en toute sécurité plusieurs arrangements de dépenses pour le même jeton, comme un abonnement mensuel, une allocation de dépenses fixe et un accord de facturation marchande.
Ce programme résout ce problème en donnant à chaque paire (user, token mint)
une Autorité d'abonnement contrôlée par le programme. Le token account de
l'utilisateur approuve cette autorité une seule fois. Le programme vérifie
ensuite chaque transfert demandé par rapport à un enregistrement distinct qui
définit qui peut retirer des fonds, combien ils peuvent retirer et quand
l'autorisation expire ou se réinitialise.
L'Autorité d'abonnement ne peut pas déplacer des fonds par elle-même. Un transfert ne réussit que lorsqu'il correspond à l'une des autorisations actives de l'utilisateur.
ID du programme
De1egAFMkMWZSN5rYXRj9CAdheBamobVNubTsi9avR44
L'ID du programme est déclaré dans program/src/lib.rs. Les workflows Surfpool
locaux installent le programme à cette adresse canonique.
Modèles de délégation
Le programme prend en charge trois modèles d'autorisation :
| Modèle | Objectif |
|---|---|
| Délégation fixe | Permet à un autre portefeuille ou service de dépenser jusqu'à un montant total fixe, éventuellement jusqu'à une date d'expiration. |
| Délégation récurrente | Permet à un autre portefeuille ou service de dépenser jusqu'à une limite qui se réinitialise à chaque période, quotidienne, hebdomadaire ou mensuelle. |
| Plan d'abonnement | Permet à un marchand de publier des conditions de facturation que les utilisateurs peuvent accepter, puis autorise les collecteurs approuvés à facturer les abonnés à chaque période de facturation. |
Jetons pris en charge
Prend en charge tous les mints de SPL Token et Token-2022.
Pour les mints Token-2022 configurés avec un TransferHook, le programme
transmet les comptes hook du mint (programme hook, PDA ExtraAccountMetaList,
extras) dans le CPI TransferChecked à chaque transfert délégué, de sorte que
la politique de hook est appliquée. Le SDK les résout pour vous :
- Client plugin (
transferFixed,transferRecurring,transferSubscription) — ajouté automatiquement. - Construction manuelle — appelez
resolveTransferHookAccounts, passeztransferHookAccounts.
Événements On-Chain
Le programme émet des événements on-chain via self-CPI afin que les indexeurs et les applications puissent suivre l'activité. Tous les événements sont enregistrés dans l'IDL publié, ce qui permet aux clients générés de les décoder. Les événements émis sont :
FixedTransferEvent,RecurringTransferEventetSubscriptionTransferEvent— un par transfert délégué. Chacun porte lereceiverTokenAccountcrédité ;SubscriptionTransferEventporte également lepuller.SubscriptionCreatedEvent,SubscriptionCancelledEventetSubscriptionResumedEvent— cycle de vie des abonnements.SubscriptionCreatedEventporte lepayer.PlanUpdatedEvent— émis lorsqu'un plan est mis à jour.
Gestion des versions
Les enregistrements appartenant au programme incluent un champ de version. Cela offre au programme un moyen de faire évoluer les données de compte au fil du temps sans perturber les utilisateurs existants. La stratégie de migration prend en charge :
- Mise à jour en place différée
- Instruction de migration explicite
- Révocation et recréation en dernier recours
Contributeurs
Le projet est maintenu par les contributeurs du
dépôt solana-program/subscriptions.
Statut de l'audit
Le programme a été audité par Cantina. Le statut de l'audit, le commit de
référence, le commit de vérification des correctifs et le delta actuel non
audité sont suivis dans le
répertoire audits/
du dépôt.
Application de démonstration
Si vous souhaitez expérimenter le programme par vous-même, vous pouvez consulter un exemple d'application ici pour voir une implémentation de bout en bout des concepts abordés dans cette section.
Is this page helpful?