PagosSuscripciones

Descripción general

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:

ModeloPropósito
Delegación fijaPermite que otra billetera o servicio gaste hasta un monto total fijo, opcionalmente hasta una fecha de vencimiento.
Delegación recurrentePermite 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ónPermite 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, pasa transferHookAccounts.

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, RecurringTransferEvent y SubscriptionTransferEvent — uno por transferencia delegada. Cada uno lleva el receiverTokenAccount acreditado; SubscriptionTransferEvent también lleva el puller.
  • SubscriptionCreatedEvent, SubscriptionCancelledEvent y SubscriptionResumedEvent — ciclo de vida de la suscripción. SubscriptionCreatedEvent lleva el payer.
  • 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?

Tabla de Contenidos

Editar Página