Das Subscriptions Delegation Program ermöglicht es Entwicklern, Benutzern die Autorisierung zukünftiger Token-Transfers von ihren Wallets mit klaren Limits zu erlauben. Es ist für wiederkehrende Zahlungen, Abonnements, Händlerabrechnungen und andere Abläufe konzipiert, bei denen ein Benutzer nicht jeden Transfer manuell signieren muss.
Zweck
Solana token accounts können einer anderen Autorität die Bewegung von Token genehmigen, aber jedes token account kann jeweils nur eine genehmigte Autorität haben. Das erschwert es einem Wallet, mehrere Ausgabenvereinbarungen für denselben Token sicher zu unterstützen, wie z. B. ein monatliches Abonnement, ein festes Ausgabenlimit und eine Händlerabrechnungsvereinbarung.
Dieses Programm löst das, indem es jedem (user, token mint)-Paar eine
programmgesteuerte Subscription Authority zuweist. Das token account des
Benutzers genehmigt diese Autorität einmalig. Das Programm prüft dann jeden
angeforderten Transfer anhand eines separaten Datensatzes, der festlegt, wer
Geldmittel abziehen kann, wie viel abgezogen werden kann und wann die
Autorisierung abläuft oder zurückgesetzt wird.
Die Subscription Authority kann Geldmittel nicht von sich aus bewegen. Ein Transfer ist nur dann erfolgreich, wenn er mit einer der aktiven Autorisierungen des Benutzers übereinstimmt.
Programm-ID
De1egAFMkMWZSN5rYXRj9CAdheBamobVNubTsi9avR44
Die Programm-ID wird in program/src/lib.rs deklariert. Lokale
Surfpool-Workflows installieren das Programm unter dieser kanonischen Adresse.
Delegationsmodelle
Das Programm unterstützt drei Autorisierungsmodelle:
| Modell | Zweck |
|---|---|
| Feste Delegation | Erlaubt einem anderen Wallet oder Dienst, bis zu einem festen Gesamtbetrag auszugeben, optional bis zu einem Ablaufzeitpunkt. |
| Wiederkehrende Delegation | Erlaubt einem anderen Wallet oder Dienst, bis zu einem Limit auszugeben, das sich jede Periode zurücksetzt, z. B. täglich, wöchentlich oder monatlich. |
| Abonnementplan | Erlaubt einem Händler, Abrechnungsbedingungen zu veröffentlichen, die Benutzer akzeptieren können, und ermöglicht autorisierten Einzugsstellen, Abonnenten in jeder Abrechnungsperiode zu belasten. |
Unterstützte Token
Unterstützt alle Mints von SPL Token und Token-2022.
Bei Token-2022-Mints mit einem konfigurierten TransferHook leitet das Programm
die Hook- Konten des Mints (Hook-Programm, ExtraAccountMetaList PDA, Extras)
bei jedem delegierten Transfer in den TransferChecked CPI weiter, sodass die
Hook-Richtlinie durchgesetzt wird. Das SDK löst diese für Sie auf:
- Plugin-Client (
transferFixed,transferRecurring,transferSubscription) — wird automatisch angehängt. - Manuelles Erstellen —
resolveTransferHookAccountsaufrufen undtransferHookAccountsübergeben.
On-Chain-Ereignisse
Das Programm sendet On-Chain-Ereignisse über Self-CPI aus, damit Indexer und Anwendungen Aktivitäten verfolgen können. Alle Ereignisse sind im veröffentlichten IDL registriert, sodass generierte Clients sie dekodieren können. Die ausgesendeten Ereignisse sind:
FixedTransferEvent,RecurringTransferEventundSubscriptionTransferEvent— jeweils eines pro delegiertem Transfer. Jedes enthält das gutgeschriebenereceiverTokenAccount;SubscriptionTransferEvententhält zusätzlich denpuller.SubscriptionCreatedEvent,SubscriptionCancelledEventundSubscriptionResumedEvent— Abonnement-Lebenszyklus.SubscriptionCreatedEvententhält denpayer.PlanUpdatedEvent— wird ausgesendet, wenn ein Plan aktualisiert wird.
Versionierung
Programmeigene Datensätze enthalten ein Versionsfeld. Dies gibt dem Programm die Möglichkeit, Kontendaten im Laufe der Zeit zu aktualisieren, ohne bestehende Nutzer zu beeinträchtigen. Die Migrationsstrategie unterstützt:
- Lazy In-Place-Update
- Explizite Migrationsanweisung
- Widerrufen und neu erstellen als Fallback
Mitwirkende
Das Projekt wird von Mitwirkenden am
solana-program/subscriptions-Repository
gepflegt.
Auditstatus
Das Programm wurde von Cantina geprüft. Auditstatus, Basis-Commit,
Fix-verifizierter Commit und aktuelles nicht geprüftes Delta werden im
audits/-Verzeichnis
des Repositorys verfolgt.
Demo-Anwendung
Wenn Sie das Programm selbst ausprobieren möchten, können Sie eine Beispielanwendung hier aufrufen, um eine End-to-End-Implementierung der in diesem Abschnitt behandelten Konzepte zu sehen.
Is this page helpful?