Del Monolito al Grafo: Migrando de Solidity a Anchor. Comparativa técnica de cómo cambia la mentalidad de desarrollo al pasar de un contrato global a un sistema basado en cuentas e instrucciones atómicas.

Para cualquier desarrollador que venga del ecosistema EVM (Ethereum, Polygon, BSC), el primer encuentro con Solana y el framework Anchor puede sentirse como intentar aprender a conducir un coche después de haber usado solo bicicletas. No es solo un cambio de lenguaje (de Solidity a Rust), es un cambio fundamental en la forma en que entendemos el estado, la memoria y la ejecución.

En Solidity, pensamos en "Contratos". En Anchor, pensamos en "Programas" y "Cuentas". Esta distinción parece semántica, pero técnicamente es la diferencia entre un monolito y un grafo.


1. El Modelo Monolítico: Solidity y el Estado Global

En Solidity, un contrato inteligente es como un objeto gigante. El código y los datos viven juntos. Si creas un contrato para gestionar tokens, los saldos de los usuarios se guardan en un mapping(address => uint256) dentro del propio contrato.

El flujo de trabajo en EVM:

  1. Llamas a una función del contrato.
  2. El contrato busca en su propia "memoria interna" el saldo del usuario.
  3. El contrato actualiza ese valor y guarda el cambio en el estado global de la red.

El problema: Este modelo es intrínsecamente secuencial. Si diez personas quieren interactuar con el mismo contrato, la red debe procesarlas una por una para evitar que el estado interno se corrompa. Es el cuello de botella que genera las altas comisiones y la latencia.


2. El Modelo de Grafo: Anchor y la Separación de Estado

Solana rompe este esquema con una premisa radical: Los programas son stateless (no tienen estado).

Un programa en Anchor es simplemente un conjunto de instrucciones lógicas. No guarda ningún dato. Toda la información (saldos, configuraciones, identidades) vive en Cuentas, que funcionan como archivos independientes en un disco duro.

El flujo de trabajo en Anchor:

  1. Llamas a una instrucción del programa.
  2. Tú (el cliente) debes pasarle al programa todas las cuentas (archivos) que el programa necesitará leer o escribir.
  3. El programa ejecuta la lógica sobre esas cuentas y las cierra.

Este enfoque permite que Solana sea masivamente paralelo. Si dos transacciones tocan cuentas diferentes, el motor Sealevel las ejecuta al mismo tiempo. Ya no hay una "fila" única, sino miles de hilos de ejecución paralelos.


3. Caso de Estudio: La Plataforma de RWA

Si miramos el código de nuestro repositorio solana-rwa, podemos ver exactamente cómo se aplica esta mentalidad de "grafo".

De un Mapping a una PDA

En Solidity, para gestionar múltiples tokens RWA, probablemente usaríamos un mapa complejo: mapping(bytes32 => TokenInfo).

En nuestro proyecto de Solana, utilizamos PDAs (Program Derived Addresses). En lugar de un mapa central, creamos una dirección única para cada token basada en semillas: [b"token", owner, token_id].

// Concepto simplificado de nuestra implementación #[derive(Accounts)] pub struct Initialize<'info> { #[account( init, payer = payer, space = 8 + TokenState::LEN, seeds = [b"token", owner.key().as_ref(), token_id.as_ref()], bump )] pub token_state: Account<'info, TokenState>, // ... otras cuentas }

En lugar de buscar en un monolito, el programa "deriva" la dirección de la cuenta de datos. El estado no está dentro del programa, sino distribuido en la red en forma de cuentas.

Modularidad Atómica

Nuestra arquitectura divide la lógica en tres programas independientes:

  • solana-rwa (Lógica de tokens)
  • identity-registry (Lógica de KYC)
  • compliance-aggregator (Lógica de reglas)

En EVM, esto a menudo se resuelve con un "Contrato Maestro" que llama a otros. En Solana, son instrucciones atómicas que interactúan pasando cuentas entre sí. Es un sistema mucho más modular y resistente a fallos.


4. Comparativa Técnica: Mindset Shift

Concepto Mentalidad Solidity (Monolito) Mentalidad Anchor (Grafo)
Estado Interno (storage) Externo (Accounts)
Ejecución Secuencial (Uno por uno) Paralela (Sealevel)
Acceso a Datos mapping y arrays internos Derivación de PDAs
Responsabilidad El contrato busca sus datos El cliente provee los datos al programa
Escalabilidad Limitada por el estado global Escalable mediante cuentas distribuidas

Conclusión: Del Objeto al Dato

Migrar de Solidity a Anchor no es solo aprender Rust; es pasar de una programación Orientada a Objetos (donde el contrato es el objeto que contiene todo) a una programación Orientada a Datos.

Este cambio es lo que permite que la tokenización de RWA sea viable a escala institucional. Al tratar los activos no como entradas en una tabla global, sino como cuentas independientes y derivables, eliminamos los cuellos de botella y abrimos la puerta a una infraestructura financiera que realmente puede competir con la velocidad de los mercados tradicionales.

¿Quieres ver la arquitectura en acción? Explora la carpeta solana-rwa/programs en nuestro repositorio 87maxi/rwa para ver cómo implementamos la derivación de PDAs y la gestión de cuentas stateless.

💬

Comentarios

Powered by Giscus · GitHub Discussions

🧠 Web3 & Blockchain