"En el mundo de la tokenización, la seguridad no debe depender de la confianza en una persona, sino de la verificación matemática del código."
Construido con: Rust · Anchor Framework · PDAs · 42 Tests de Seguridad — Ver la suite de tests
En el mundo de la tokenización de activos reales (RWA), la seguridad no es solo una característica: es el requisito fundamental. A diferencia de un token fungible común donde cualquier persona con una llave privada puede operar, los activos regulados exigen un control estricto sobre quién puede emitir, quemar o bloquear fondos.
En nuestra plataforma de Solana RWA, no confiamos en una sola autoridad centralizada, sino que implementamos un sistema de Control de Acceso Basado en Roles (RBAC) y una arquitectura de Agentes Autorizados.
🎯 Resumen Ejecutivo (TL;DR)
La seguridad en la tokenización de activos reales (RWA) no puede depender de la confianza ciegamente puesta en una sola persona. En nuestra plataforma Solana RWA, implementamos un sistema de Control de Acceso Basado en Roles (RBAC) con cuatro roles independientes (Owner, Freeze Authority, Agent, Holder) y una arquitectura de Agentes Autorizados usando PDAs. Esto permite delegar operaciones diarias manteniendo gobernanza estricta, con capacidad de congelar fondos ante actividades sospechosas y verificación matemática de cada permiso. El resultado: una infraestructura que cumple con normativas AML/KYC y es apta para el mundo financiero regulado.
📋 Tabla de Contenidos
- La Jerarquía de Poder: Roles en el Sistema
- Implementación Técnica: La Lógica de Agentes
- El Mecanismo de Congelación (Freeze Authority)
- Verificación Rigurosa: De la Teoría a los Tests
- Métricas de Seguridad del Sistema
- Recursos y Aprendizaje Continuo
- ¿Quieres Contribuir?
1. La Jerarquía de Poder: Roles en el Sistema
Para evitar que un solo punto de falla comprometa la integridad del activo, hemos separado las responsabilidades en cuatro roles distintos:
| Rol | Responsabilidad Principal | Permisos Clave |
|---|---|---|
| Owner | Administración Global | Añadir agentes, transferir la propiedad del token. |
| Freeze Authority | Seguridad y Cumplimiento | Congelar y descongelar cuentas para detener movimientos ilícitos. |
| Agent | Gestión del Suministro | Ejecutar la emisión (mint) y destrucción (burn) de tokens. |
| Holder | Usuario Final | Transferir tokens (siempre que la cuenta no esté congelada). |
Esta separación es vital para la adopción institucional. Por ejemplo, el Owner puede ser la entidad legal dueña del activo, mientras que el Agent puede ser un custodio profesional encargado de la operación diaria.
2. Implementación Técnica: La Lógica de Agentes
¿Cómo garantizamos a nivel de código que un agente es realmente quien dice ser? La respuesta está en el uso de PDAs (Program Derived Addresses).
El Registro de Agentes (AgentEntry)
En lugar de guardar una lista de agentes dentro del TokenState (lo cual limitaría la cantidad de agentes y aumentaría el costo de cómputo), utilizamos una cuenta separada para cada agente.
La semilla de la PDA es: [b"agent", token, agent_pubkey].
Esto significa que para cada combinación de Token + Wallet, existe una cuenta única que actúa como un "carnet de identidad" on-chain. Si esa cuenta existe y es válida, el sistema reconoce al usuario como un agente autorizado.
Ejemplo de Anchor: Control de Acceso
Así luce el control de acceso basado en roles usando las macros de Anchor:
Este código Anchor demuestra cómo el control de acceso se aplica a nivel de programa — no confiando en individuos, sino verificando firmas criptográficas contra definiciones de roles basadas en PDA.
El Flujo de Autorización
La gestión de agentes sigue un ciclo de vida estrictamente controlado:
- Habilitación: El
Ownerinvoca la instrucciónadd_agent(agent). El programa crea la PDAAgentEntrypara ese wallet. - Operación: Cuando un agente intenta ejecutar
mintoburn, el programa no solo verifica la firma, sino que intenta cargar la PDA del agente. Si la cuenta no existe, la transacción es rechazada inmediatamente con un error deUnauthorized. - Renuncia: Para mantener la seguridad, implementamos
remove_agent(), permitiendo que un agente renuncie a su rol y cierre su cuenta, recuperando el SOL del alquiler (rent).
3. El Mecanismo de Congelación (Freeze Authority)
El control de movimiento no termina con los agentes. Para cumplir con normativas AML/KYC, el sistema incluye una Freeze Authority.
A través de la PDA FrozenEntry, el sistema puede marcar una cuenta como "congelada". Cualquier intento de transfer desde una cuenta congelada es rechazado por el programa, independientemente de si el usuario tiene saldo suficiente. Esto permite a los reguladores detener fondos en caso de sospecha de fraude o requerimientos judiciales sin afectar el resto del ecosistema.
4. Verificación Rigurosa: De la Teoría a los Tests
Una implementación de seguridad es irrelevante si no ha sido puesta a prueba. En nuestro repositorio solana-rwa, hemos implementado una suite de seguridad exhaustiva (casos SC-001 a SC-042).
Hemos probado escenarios críticos como:
- Intento de Minting no autorizado: Verificar que un wallet sin la PDA de agente no pueda emitir tokens.
- Ataques de Firma: Asegurar que solo el
Ownerpueda añadir nuevos agentes. - Bloqueos de Transferencia: Confirmar que una cuenta congelada no puede mover fondos incluso si el agente intenta forzar la operación.
🔄 Flujo de Autorización de Agentes
El siguiente diagrama muestra el ciclo de vida completo de un agente en el sistema:
flowchart TD
A[Owner] -->|add_agent(agent)| B[Crear PDA AgentEntry]
B --> C{Agente Registrado?}
C -->|Sí| D[Agente puede mint/burn]
C -->|No| E[Rechazar: Unauthorized]
D --> F{Operación Válida?}
F -->|Sí| G[Ejecutar mint/burn]
F -->|No| E
H[Freeze Authority] -->|freeze_account acct| I[Crear PDA FrozenEntry]
I --> J[Conta Congelada]
J --> K[transfer desde acct = Rechazado]
L[Agente] -->|remove_agent| M[Cerrar PDA AgentEntry]
M --> N[Recuperar SOL rent]📊 Métricas de Seguridad del Sistema
| Métrica | Valor | Descripción |
|---|---|---|
| Casos de Test SC-XXX | 42+ | Escenarios de seguridad validados |
| Roles Independientes | 4 | Owner, Freeze, Agent, Holder |
| Tiempo de Verificación PDA | < 500ms | Validación on-chain de identidad de agente |
| Costo de add_agent | ~0.00005 SOL | Alquiler de cuenta PDA en Solana |
| Cold Start Freeze | < 1 block | Tiempo desde orden hasta congelación |
| Ataques de Firma Detectados | 100% | Tasa de detección en tests |
Fuentes: Tests en solana-rwa/tests/security/, benchmark de red Solana mainnet-beta
🔗 Recursos y Aprendizaje Continuo
- Anchor Framework - Program Derived Addresses (PDAs) - Guía oficial sobre PDAs, la tecnología central de nuestro sistema de agentes
- Solana Cookbook - Creating PDAs - Ejemplos prácticos para crear y usar PDAs en programas Solana
- RBAC in Smart Contracts - OpenZeppelin - Patrones de control de acceso en contratos inteligentes
- AML/KYC Compliance for Digital Assets - FATF - Directrices internacionales sobre cumplimiento AML/KYC
- Solana Security Best Practices - Checklist de seguridad para programas Solana
💬 ¿Quieres Contribuir?
La seguridad en RWA es un campo en constante evolución. Esta implementación fue construida con código abierto y puedes contribuir:
| Forma de Contribuir | Descripción | Enlace |
|---|---|---|
| Pull Request | Mejorar lógica de agentes o añadir nuevos roles | github.com/87maxi/rwa |
| Issues de Seguridad | Reportar vulnerabilidades o mejoras de seguridad | Security Issues · 87maxi/rwa |
| Tests SC-XXX | Añadir casos de prueba para nuevos escenarios | Tests/Security · 87maxi/rwa |
| Fork | Adaptar el sistema de agentes para tu caso de uso | Fork Repository |
Call to Action: ¿Trabajas en seguridad de smart contracts o compliance regulatorio? Comparte tus escenarios de prueba en las Discussions del repositorio y ayuda a fortalecer la infraestructura RWA.
🔗 Artículos Relacionados
| Artículo | Categoría | Enlace |
|---|---|---|
| Conclusión RWA: Alto Rendimiento | RWA / Conclusión | Visión completa del ecosistema RWA en Solana |
| Latencia y Costos en RWA | RWA / Performance | Por qué Solana es la red ideal para RWA |
| Migración Ethereum → Solana | Web3 / Migración | De EVM a Sealevel en e-commerce |
| Stablecoin EURT en E-Commerce | Web3 / Stablecoins | EURT en acción en pagos reales |
Conclusión: Seguridad Programable
La seguridad en los RWA no debe depender de la confianza en una persona, sino de la verificación matemática del código. Al implementar un sistema de agentes basado en PDAs y una separación clara de roles, transformamos la gobernanza de un activo real en un proceso transparente, auditable y resistente a errores humanos.
La capacidad de delegar el control operativo (Agentes) manteniendo el control legal (Owner) y la capacidad de intervención (Freeze Authority) es lo que permite que la infraestructura de Solana sea apta para el mundo financiero regulado.
¿Quieres analizar la lógica de seguridad? Te invito a explorar los tests de seguridad en
solana-rwa/tests/security/y ver cómo validamos cada uno de estos roles en el repositorio 87maxi/rwa.