Hace tiempo me vengo preguntando cómo es que funciona la entrada del código que escribo a la blockchain. A veces al empezar todo suena tan abstracto que es más sencillo huir. Pero acá te lo vengo a plantear de una manera fácil. Vamos a seguir el viaje de un dato desde que nace en tu código hasta que se vuelve inmutable en la cadena.
1. El Origen: El Struct "Vivo"
Todo empieza en tu Smart Contract. Imagina que estás creando un sistema para una institución financiera. Tienes una estructura de datos clara y segura con struct, ya que no importa la blockchain de cual hablemos, si usa rust usará un struct de esta manera:
#[derive(Serialize, Deserialize)] // La magia de Serde comienza aquí
struct Transaccion {
monto: u64,
destino: String,
moneda: String,
}
Acabamos de crear la forma de nuestros datos. En este punto, los datos están "vivos" en la RAM. Pero hay un problema: la RAM es volátil y local. Si queremos que estos datos vivan para siempre, tenemos que "congelarlos", ya que de otra manera no podrán ser transmitidos ni ingresados al registro de la cadena.
2. La Transformación: Compilación y Serialización
Para entender mejor, el ejemplo de cómo el código compila es muy parecido a cuando hacemos una serialización con uno de los crates que más usamos a diario: Serde.
Al compilar, estamos haciendo una especie de "serialización" hacia la ledger. Traducimos nuestra lógica (el código) a instrucciones que la red entienda (en nuestro caso, Wasm o WebAssembly).
3. El Formato: ¿Por qué no usamos JSON?
Si has hecho desarrollo web, seguro estás acostumbrado al JSON.
Sin embargo en la blockchain, y aunque cada red tiene su "idioma" (XDR en Stellar, SCALE en Polkadot, Borsh en Solana), todas coinciden en algo: el binario es el rey. Para que una red sea global, no podemos permitirnos el lujo de enviar texto pesado. Lo que necesitamos es enviar bytes puros, rápidos y seguros. Si hablamos de XDR entonces veremos que:
- Es Binario: No desperdicia ni un solo bit en espacios o comillas.
- Es Estricto: No hay dudas de si un número es un entero o un decimal. Para un banco, esta precisión es la diferencia entre el éxito y un error millonario.
Cada blockchain usará el "idioma" que mejor caracteristicas tenga para su propósito.
4. El Motor: Wasm y Soroban
Cuando envías esa transacción, el código que la procesa es un binario Wasm. ¿Por qué es la clave?
- Portabilidad: Corre igual en Singapur o en Buenos Aires.
- Aislamiento: Tu código corre en un "sandbox". Si algo falla, no rompe la blockchain entera.
- Velocidad: Ejecución casi nativa. Finanzas en segundos, no en días.
5. El Destino: El Ledger y el "Deserialize"
Una vez que los bytes llegan al nodo, ocurre el proceso inverso. El nodo recibe el paquete en XDR, y como conoce la estructura, los "deserializa" (es decir, los analiza y desempaqueta). Si todo es correcto, se escriben en el Ledger. Lo que empezó como un simple struct de Rust ahora es un registro inmutable.
Resumen
- Rust: Seguridad del dato.
- Serde: La herramienta de empaque.
- XDR: El idioma eficiente de Stellar.
- Wasm: El motor que procesa todo sin errores.