Il Programma di Delega delle Sottoscrizioni consente agli sviluppatori di permettere agli utenti di autorizzare futuri trasferimenti di token dai loro wallet con limiti chiari. È progettato per pagamenti ricorrenti, sottoscrizioni, fatturazione di esercenti e altri flussi in cui un utente non dovrebbe dover firmare manualmente ogni trasferimento.
Scopo
Gli account token di Solana possono approvare un'altra autorità per spostare token, ma ogni account token può avere solo un'autorità approvata alla volta. Questo rende difficile per un singolo wallet supportare in sicurezza diverse configurazioni di spesa per lo stesso token, come una sottoscrizione mensile, un'indennità di spesa fissa e un accordo di fatturazione con un esercente.
Questo programma risolve il problema fornendo a ogni coppia (user, token mint)
un'Autorità di Sottoscrizione controllata dal programma. L'account token
dell'utente approva quell'autorità una sola volta. Il programma verifica poi
ogni trasferimento richiesto confrontandolo con un record separato che definisce
chi può prelevare fondi, quanto può prelevare e quando l'autorizzazione scade o
si ripristina.
L'Autorità di Sottoscrizione non può spostare fondi da sola. Un trasferimento ha successo solo quando corrisponde a una delle autorizzazioni attive dell'utente.
ID del Programma
De1egAFMkMWZSN5rYXRj9CAdheBamobVNubTsi9avR44
L'ID del programma è dichiarato in program/src/lib.rs. I flussi di lavoro
locali di Surfpool installano il programma a questo indirizzo canonico.
Modelli di Delega
Il programma supporta tre modelli di autorizzazione:
| Modello | Scopo |
|---|---|
| Delega fissa | Consente a un altro wallet o servizio di spendere fino a un importo totale fisso, opzionalmente fino a una data di scadenza. |
| Delega ricorrente | Consente a un altro wallet o servizio di spendere fino a un limite che si ripristina ogni periodo, ad esempio giornaliero, settimanale o mensile. |
| Piano di sottoscrizione | Consente a un esercente di pubblicare termini di fatturazione che gli utenti possono accettare, quindi permette ai riscossori approvati di addebitare agli abbonati ogni periodo di fatturazione. |
Token Supportati
Supporta tutti i mint sia da SPL Token che da Token-2022.
Per i mint Token-2022 con un TransferHook configurato, il programma inoltra
gli account hook del mint (programma hook, PDA ExtraAccountMetaList, extra)
nel CPI TransferChecked ad ogni trasferimento delegato, in modo che la policy
dell'hook venga applicata. L'SDK li risolve automaticamente per te:
- Client plugin (
transferFixed,transferRecurring,transferSubscription) — aggiunti automaticamente. - Costruzione manuale — chiama
resolveTransferHookAccounts, passatransferHookAccounts.
Eventi On-Chain
Il programma emette eventi on-chain tramite self-CPI, in modo che gli indicizzatori e le applicazioni possano tracciare l'attività. Tutti gli eventi sono registrati nell'IDL pubblicato, così i client generati possono decodificarli. Gli eventi emessi sono:
FixedTransferEvent,RecurringTransferEventeSubscriptionTransferEvent— uno per ogni trasferimento delegato. Ognuno riporta ilreceiverTokenAccountaccreditato;SubscriptionTransferEventriporta anche ilpuller.SubscriptionCreatedEvent,SubscriptionCancelledEventeSubscriptionResumedEvent— ciclo di vita della sottoscrizione.SubscriptionCreatedEventriporta ilpayer.PlanUpdatedEvent— emesso quando un piano viene aggiornato.
Versionamento
I record di proprietà del programma includono un campo versione. Questo fornisce al programma un percorso per aggiornare i dati degli account nel tempo senza compromettere gli utenti esistenti. La strategia di migrazione supporta:
- Aggiornamento lazy in-place
- Istruzione di migrazione esplicita
- Fallback con revoca e ricreazione
Contributori
Il progetto è mantenuto dai contributori del
repository solana-program/subscriptions.
Stato dell'Audit
Il programma è stato verificato da Cantina. Lo stato dell'audit, il commit di
riferimento, il commit con le correzioni verificate e il delta corrente non
verificato sono tracciati nella
directory audits/
del repository.
Applicazione Demo
Se desideri sperimentare il programma in prima persona, puoi consultare un' applicazione di esempio qui per vedere un'implementazione end-to-end dei concetti trattati in questa sezione.
Is this page helpful?