Lanzar un token de fidelización / bucle cerrado

Sui CLT con transferencias controladas por lista de permitidos + pausa. Los titulares mueven puntos solo entre direcciones que haya aprobado previamente.

Los puntos de fidelización y los créditos dentro de la aplicación funcionan mejor cuando permanecen en el ecosistema que controla. Este preset implementa un Token Sui Closed-Loop donde el implementador mantiene una lista de permitidos de direcciones de receptores aprobadas (comerciantes, socios, billeteras de operadores). Los tokens acuñados para usuarios solo pueden fluir hacia esa lista de permitidos — no hay ruta de escape a través de billeteras arbitrarias, no hay intercambio a una Moneda genérica, no hay listado de DEX por defecto.

Qué se incluye

Por qué esta pila

El `sui::token` Closed-Loop Token de Sui es el único primitivo Move convencional que controla las transferencias a nivel del sistema de tipos — los titulares reciben `Token<T>` (sin capacidad `store`, sin `public_transfer`) y cada transferencia produce un ActionRequest que debe ser aprobado contra la TokenPolicy implementada. La regla de lista de permitidos es una configuración `VecSet<address>` que el implementador administra a través de dos funciones administrativas controladas por TokenPolicyCap (add_to_allowlist, remove_from_allowlist). La pausa cubre el caso donde el bucle cerrado en sí necesita una parada de emergencia.

¿Puedo hacer que los tokens de los titulares sean permanentemente soulbound en su lugar?

Sí — elimine la política de bucle cerrado del paquete y habilite non-transferable. Esto registra una TokenPolicy vacía: cada ActionRequest de transferencia se cancela en confirm_request. El preset non-transferable + Identity-SBT en Sui cubre ese caso.

¿Cómo agrego direcciones a la lista de permitidos después de la implementación?

El módulo Move implementado expone `add_to_allowlist(policy, cap, addr, ctx)` y `remove_from_allowlist`. Llámelos desde la página de administración o desde cualquier billetera que tenga el TokenPolicyCap — la misma billetera que implementó el token por defecto.

¿Qué sucede con los tokens enviados a direcciones no permitidas?

La llamada `token::transfer` devuelve un ActionRequest; `verify_allowlist_transfer` afirma que el destinatario está en la lista, de lo contrario la transacción se cancela. Los tokens nunca salen de la dirección del remitente — no hay saldo fallido y estancado para limpiar.