Het Subscriptions Delegation Program stelt ontwikkelaars in staat om gebruikers toe te staan toekomstige tokenoverdrachten vanuit hun wallets te autoriseren met duidelijke limieten. Het is ontworpen voor terugkerende betalingen, abonnementen, handelaarsfacturering en andere stromen waarbij een gebruiker niet elke overdracht handmatig hoeft te ondertekenen.
Doel
Solana token accounts kunnen een andere authority goedkeuren om tokens te verplaatsen, maar elk token account kan slechts één goedgekeurde authority tegelijk hebben. Dat maakt het moeilijk voor één wallet om veilig meerdere bestedingsregelingen voor dezelfde token te ondersteunen, zoals een maandelijks abonnement, een vast bestedingsbudget en een handelaarsfactureringsovereenkomst.
Dit programma lost dat op door elk (user, token mint)-paar een
programmagestuurde Subscription Authority te geven. Het token account van de
gebruiker keurt die authority eenmalig goed. Het programma controleert
vervolgens elke gevraagde overdracht tegen een afzonderlijk record dat
definieert wie geld kan opnemen, hoeveel ze kunnen opnemen en wanneer de
autorisatie verloopt of wordt gereset.
De Subscription Authority kan zelfstandig geen geld verplaatsen. Een overdracht slaagt alleen wanneer deze overeenkomt met een van de actieve autorisaties van de gebruiker.
Programma-ID
De1egAFMkMWZSN5rYXRj9CAdheBamobVNubTsi9avR44
Het programma-ID is gedeclareerd in program/src/lib.rs. Lokale
Surfpool-workflows installeren het programma op dit canonieke adres.
Delegatiemodellen
Het programma ondersteunt drie autorisatiemodellen:
| Model | Doel |
|---|---|
| Vaste delegatie | Laat een andere wallet of service tot een vast totaalbedrag uitgeven, optioneel tot een vervaltijd. |
| Terugkerende delegatie | Laat een andere wallet of service tot een limiet uitgeven die elke periode wordt gereset, zoals dagelijks, wekelijks of maandelijks. |
| Abonnementsplan | Laat een handelaar factureringsvoorwaarden publiceren die gebruikers kunnen accepteren, en sta vervolgens goedgekeurde incasseerders toe om abonnees elke factureringsperiode te belasten. |
Ondersteunde Tokens
Ondersteunt alle mints van zowel SPL Token als Token-2022.
Voor Token-2022 mints met een geconfigureerde TransferHook stuurt het
programma de hook-accounts van de mint (hook-programma, ExtraAccountMetaList
PDA, extra's) door naar de TransferChecked CPI bij elke gedelegeerde
overdracht, zodat het hook-beleid wordt gehandhaafd. De SDK lost ze voor je op:
- Plugin-client (
transferFixed,transferRecurring,transferSubscription) — automatisch toegevoegd. - Handmatig bouwen — roep
resolveTransferHookAccountsaan, geeftransferHookAccountsmee.
On-Chain Gebeurtenissen
Het programma verzendt on-chain gebeurtenissen via self-CPI zodat indexers en applicaties activiteit kunnen bijhouden. Alle gebeurtenissen zijn geregistreerd in de gepubliceerde IDL, zodat gegenereerde clients ze kunnen decoderen. De uitgezonden gebeurtenissen zijn:
FixedTransferEvent,RecurringTransferEvent, enSubscriptionTransferEvent— één per gedelegeerde overdracht. Elk draagt de gecrediteerdereceiverTokenAccount;SubscriptionTransferEventdraagt ook depuller.SubscriptionCreatedEvent,SubscriptionCancelledEvent, enSubscriptionResumedEvent— levenscyclus van abonnementen.SubscriptionCreatedEventdraagt depayer.PlanUpdatedEvent— uitgezonden wanneer een plan wordt bijgewerkt.
Versiebeheer
Door het programma beheerde records bevatten een versieveld. Dit geeft het programma een manier om accountgegevens in de loop van de tijd bij te werken zonder bestaande gebruikers te verstoren. De migratiestrategie ondersteunt:
- Lazy in-place update
- Expliciete migratie-instructie
- Intrekken en opnieuw aanmaken als terugvaloptie
Bijdragers
Het project wordt onderhouden door bijdragers aan de
solana-program/subscriptions repository.
Auditstatus
Het programma is geauditeerd door Cantina. De auditstatus, baseline-commit,
fix-geverifieerde commit en de huidige niet-geauditeerde delta worden
bijgehouden in de
audits/ map
van de repository.
Demoapplicatie
Als je zelf met het programma wilt experimenteren, kun je een voorbeeldapplicatie hier bekijken om een end-to-end implementatie te zien van de concepten die in dit onderdeel worden behandeld.
Is this page helpful?