Este contrato implementa USDCx, un token fungible SIP-010 en Stacks con un sistema de control de acceso basado en roles y funcionalidad de pausa para la seguridad del protocolo. Expone la interfaz estándar SIP-010 para transferencias, consultas de suministro y metadatos, mientras proporciona funciones sólo para el protocolo para acuñar, quemar, actualizaciones de gobernanza y pausa.
Roles
El contrato define tres roles privilegiados:
Gobernanza (governance-role) – gestiona la configuración del protocolo, actualiza los metadatos del token y asigna roles.
Acuñar (mint-role) – autorizado para acuñar, quemar y realizar transferencias a nivel de protocolo.
Pausa (pause-role) – autorizado para pausar y reanudar el protocolo.
Una pausa del protocolo detiene las operaciones que cambian el estado por seguridad. El desplegador del contrato recibe automáticamente el gobernance rol. El contrato complementario .usdcx-v1 recibe automáticamente el mint rol.
Desglose Función por Función
Funciones Estándar SIP-010
transfer(amount, sender, recipient, memo)
Transfiere USDCx entre principales, siguiendo las reglas SIP-010. La función verifica que el remitente sea ya sea tx-sender o contract-caller (para contratos que gestionan custodia o bóvedas) y luego realiza la transferencia. Se registra en la cadena un memo opcional.
get-name(), get-symbol(), get-decimals()
Getters de metadatos estándar SIP-010 que devuelven el nombre del token, el símbolo y la precisión decimal.
Devuelve el saldo de tokens para el principal dado. En esta implementación, las tres funciones de acceso devuelven el mismo valor de saldo SIP-010.
get-total-supply()
Devuelve la oferta total de USDCx acuñada menos la quemada.
get-token-uri()
Devuelve el URI de metadatos del token.
Validación de llamantes del protocolo
Estas funciones hacen cumplir los permisos basados en roles del contrato.
is-protocol-caller(role, contract)
Comprueba si el principal de contrato especificado posee el rol requerido.
validate-protocol-caller(role, contract)
Asegura que el llamante tenga el rol correcto. Si no, devuelve ERR_UNAUTHORIZED.
is-protocol-paused()
Devuelve si el protocolo está actualmente en pausa.
validate-protocol-active()
Asegura que el protocolo no esté en pausa, de lo contrario devuelve ERR_PAUSED.
Operaciones de Token Exclusivas del Protocolo
Estas funciones habilitan acuñación/quemado/transferencias exclusivamente para contratos de protocolo autorizados.
protocol-transfer(amount, sender, recipient)
Realiza una transferencia a nivel de protocolo en nombre de otro contrato. Sólo los llamantes con el rol mint pueden usarla. Falla si el protocolo está en pausa.
protocol-mint(amount, recipient)
Acuña nuevos USDCx a un principal. Restringido al rol mint y deshabilitado cuando está en pausa.
protocol-burn(amount, owner)
Quema tokens del saldo de un principal. También restringido al rol mint y deshabilitado cuando está en pausa.
protocol-mint-many(recipients)
Acuña por lotes tokens a múltiples destinatarios en una sola llamada. Cada elemento incluye { amount, recipient }. Sólo invocable por entidades con el rol mint.
Funciones de Gobernanza
Sólo el rol governance puede llamar a estas funciones.
protocol-set-name(new-name)
Actualiza el nombre SIP-010 del token.
protocol-set-symbol(new-symbol)
Actualiza el símbolo ticker SIP-010 del token.
protocol-set-token-uri(new-uri)
Actualiza el URI de metadatos SIP-016.
set-active-protocol-caller(caller, role, enabled)
Agrega o elimina un principal de un rol específico del protocolo.
Se usa para rotar sistemas, actualizar contratos complementarios o delegar nueva responsabilidad.
Controles de Pausa
Estas funciones permiten al protocolo detener operaciones por seguridad o mantenimiento.
pause()
Pausa el contrato, deshabilitando acuñación, quemado y todas las acciones exclusivas del protocolo. Sólo invocable por el rol pause.
unpause()
Vuelve a habilitar el protocolo después de una pausa. También restringido al rol pause.
Ambas funciones emiten un evento on-chain para transparencia.