El programa de delegación de suscripciones permite a los desarrolladores que los usuarios autoricen futuras transferencias de tokens desde sus billeteras con límites claros. Está diseñado para pagos recurrentes, suscripciones, facturación de comerciantes y otros flujos donde el usuario no debería tener que firmar cada transferencia manualmente.
Propósito
Las cuentas de tokens de Solana pueden aprobar otra autoridad para mover tokens, pero cada cuenta de tokens solo puede tener una autoridad aprobada a la vez. Esto dificulta que una billetera admita de forma segura varios acuerdos de gasto para el mismo token, como una suscripción mensual, una asignación de gasto fija y un acuerdo de facturación con un comerciante.
Este programa resuelve esto al otorgar a cada par (user, token mint) una
autoridad de suscripción controlada por el programa. La cuenta de tokens del
usuario aprueba esa autoridad una vez. Luego, el programa verifica cada
transferencia solicitada contra un registro separado que define quién puede
retirar fondos, cuánto puede retirar y cuándo expira o se restablece la
autorización.
La autoridad de suscripción no puede mover fondos por sí misma. Una transferencia solo tiene éxito cuando coincide con una de las autorizaciones activas del usuario.
ID del programa
De1egAFMkMWZSN5rYXRj9CAdheBamobVNubTsi9avR44
El ID del programa se declara en program/src/lib.rs. Los flujos de trabajo
locales de Surfpool instalan el programa en esta dirección canónica.
Modelos de delegación
El programa admite tres modelos de autorización:
| Modelo | Propósito |
|---|---|
| Delegación fija | Permite que otra billetera o servicio gaste hasta un monto total fijo, opcionalmente hasta una fecha de vencimiento. |
| Delegación recurrente | Permite que otra billetera o servicio gaste hasta un límite que se restablece en cada período, como diario, semanal o mensual. |
| Plan de suscripción | Permite que un comerciante publique términos de facturación que los usuarios pueden aceptar, luego permite que cobradores aprobados cobren a los suscriptores en cada período de facturación. |
Tokens Soportados
Compatible con todos los mints de SPL Token y Token-2022.
Para los mints de Token-2022 con un TransferHook configurado, el programa
reenvía las cuentas hook del mint (programa hook, PDA de ExtraAccountMetaList,
extras) al CPI de TransferChecked en cada transferencia delegada, de modo que
la política del hook se aplica correctamente. El SDK las resuelve
automáticamente:
- Cliente de plugin (
transferFixed,transferRecurring,transferSubscription) — se añaden automáticamente. - Construcción manual — llama a
resolveTransferHookAccounts, pasatransferHookAccounts.
Eventos On-Chain
El programa emite eventos on-chain mediante self-CPI para que los indexadores y las aplicaciones puedan rastrear la actividad. Todos los eventos están registrados en el IDL publicado, por lo que los clientes generados pueden decodificarlos. Los eventos emitidos son:
FixedTransferEvent,RecurringTransferEventySubscriptionTransferEvent— uno por transferencia delegada. Cada uno lleva elreceiverTokenAccountacreditado;SubscriptionTransferEventtambién lleva elpuller.SubscriptionCreatedEvent,SubscriptionCancelledEventySubscriptionResumedEvent— ciclo de vida de la suscripción.SubscriptionCreatedEventlleva elpayer.PlanUpdatedEvent— emitido cuando se actualiza un plan.
Versionado
Los registros de propiedad del programa incluyen un campo de versión. Esto le proporciona al programa una vía para actualizar los datos de las cuentas a lo largo del tiempo sin afectar a los usuarios existentes. La estrategia de migración admite:
- Actualización en sitio diferida
- Instrucción de migración explícita
- Reversión y recreación como alternativa
Colaboradores
El proyecto es mantenido por los colaboradores del
repositorio solana-program/subscriptions.
Estado de la Auditoría
El programa ha sido auditado por Cantina. El estado de la auditoría, el commit
de referencia, el commit de verificación de correcciones y el delta no auditado
actual se registran en el
directorio audits/
del repositorio.
Aplicación de Demostración
Si deseas explorar el programa por tu cuenta, puedes ver una aplicación de ejemplo aquí para conocer una implementación completa de los conceptos tratados en esta sección.
Is this page helpful?