Decodificador de transacciones Solana

Pega el base64 que una cartera te pide firmar o la cadena que devuelve un RPC. El decodificador enumera firmantes, cuentas e instrucciones, nombra los programas comunes y resume las transferencias de SOL y tokens.

Firmada o sin firmar. La decodificación se ejecuta en tu navegador; no se envía nada a ningún sitio, así que es segura para transacciones sin firmar que estés a punto de firmar.
Ejemplos:

Se decodifica en tu navegador con JavaScript. Las direcciones nunca se suben ni se almacenan.

¿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

Mensajes legacy vs. versionados (v0)

PropiedadLegacyv0 (versionado)
Prefijo del mensajeninguno; empieza con la cabecerabyte de versión 0x80 antes de la cabecera
Cuentastodas en línea, hasta el límite de 1232 bytesen línea más índices en tablas de búsqueda de direcciones
Resoluble sin conexiónsí, cada cuenta está en el mensajelas entradas de las tablas de búsqueda requieren datos de la cadena
Productores típicoscarteras simples, SDK antiguosagregadores 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.

Preguntas frecuentes

¿Qué formatos funcionan?

El base64 de getTransaction con codificación base64, del signTransaction de una cartera, o de Transaction.serialize(); base58 como lo usa sendTransaction; hex en bruto. También se acepta un mensaje suelto (sin el array de firmas), que es lo que algunas carteras muestran antes de firmar.

¿Qué es una transacción v0?

Las transacciones versionadas (v0) pueden referenciar cuentas almacenadas en tablas de búsqueda de direcciones para que quepan más cuentas en el límite de 1232 bytes. El decodificador muestra las direcciones de las tablas y los índices, pero las cuentas reales detrás de ellos viven en la cadena y no se pueden resolver sin conexión; aparecen como 'cuenta de tabla de búsqueda #n'.

¿La firma de la transacción es lo mismo que un hash?

En Solana la primera firma sirve como ID de la transacción. Se muestra cuando el hueco de la firma no es cero; una transacción sin firmar aún no tiene ID.

¿Qué instrucciones se decodifican?

Transferencias y creación de cuentas del System Program, transferencias, aprobaciones, acuñaciones, quemas y cierres de SPL Token y Token-2022 (las variantes checked muestran la cantidad con decimales), creación de Associated Token Account, límites y precios de Compute Budget, y texto de Memo. Otros programas se muestran por nombre cuando se conocen (Jupiter, Raydium, Orca, Metaplex) con cuentas y datos en bruto.

¿Qué es el límite de 1232 bytes?

Las transacciones de Solana deben caber en un único paquete de red: 1280 bytes de MTU IPv6 menos las cabeceras dejan 1232 bytes para la transacción serializada. Cada cuenta cuesta 32 bytes y cada firma 64, y por eso las transacciones grandes usan tablas de búsqueda.

¿Por qué las cantidades están en unidades en bruto en SPL Transfer?

La instrucción Transfer simple no lleva decimales, solo TransferChecked los lleva. Convierte las unidades en bruto con el conversor de decimales una vez que conozcas los decimales del mint.