¿Qué es una transacción Solana serializada?
Una transacción Solana serializada es un array de bytes compacto: una lista con prefijo de recuento de firmas ed25519 de 64 bytes seguida del mensaje, que contiene una cabecera (número de firmantes y de cuentas de solo lectura), las direcciones de las cuentas como claves de 32 bytes, un blockhash reciente y las instrucciones, cada una referenciando su programa y sus cuentas por índice. Las carteras y los nodos RPC la intercambian como base64 o base58; la primera firma sirve también como ID de la transacción.
Cómo leer el resultado
- Las cuentas se listan en el orden del mensaje: primero los firmantes, luego las escribibles y después las de solo lectura. El pagador de la comisión es la cuenta 0.
- Las instrucciones muestran el programa, el nombre y los campos decodificados, y bajo "Cuentas y datos" la lista exacta de cuentas y los bytes de datos.
- Las transferencias en la parte superior resumen qué se mueve: SOL vía el System Program y tokens vía Transfer / TransferChecked.
Mensajes legacy vs. versionados (v0)
| Propiedad | Legacy | v0 (versionado) |
|---|---|---|
| Prefijo del mensaje | ninguno; empieza con la cabecera | byte de versión 0x80 antes de la cabecera |
| Cuentas | todas en línea, hasta el límite de 1232 bytes | en línea más índices en tablas de búsqueda de direcciones |
| Resoluble sin conexión | sí, cada cuenta está en el mensaje | las entradas de las tablas de búsqueda requieren datos de la cadena |
| Productores típicos | carteras simples, SDK antiguos | agregadores DEX, cualquier cosa con muchas cuentas |
Ejemplo práctico
Un mensaje de transferencia de SOL tiene 3 cuentas: el remitente (firmante, escribible), el destinatario (escribible) y el System Program 11111111111111111111111111111111. Su única instrucción apunta al índice de cuenta 2 con los datos 02000000 (instrucción 2 = Transfer, como u32 little-endian) seguidos de la cantidad como u64 little-endian, así que 00e1f50500000000 son 100.000.000 lamports = 0,1 SOL. Una transferencia de USDC, en cambio, apunta al programa Token con una instrucción TransferChecked que lleva la cantidad y decimals = 6.
Comprobar la solicitud de una cartera
Cuando una dApp solicita una firma, las carteras suelen mostrar una simulación. Si quieres la verdad de fondo, registra el mensaje serializado de la dApp (la mayoría de bibliotecas exponen transaction.serialize({ requireAllSignatures: false })) y pégalo aquí: verás cada instrucción, incluidos los ajustes de Compute Budget y cualquier SetAuthority o Approve que un resumen de simulación pueda ocultar.
Relacionado: validador de direcciones Solana, conversor de lamports, transferencia en lote en devnet.