Home/Wiki/Temas Técnicos Avanzados: Token-2022, PDA, Multisig y Errores

Temas Técnicos Avanzados: Token-2022, PDA, Multisig y Errores

Guía técnica avanzada que cubre fallos de transacciones, especificidades de Token-2022, gestión de cuentas PDA, integración de billeteras hardware e interpretación de códigos de error.

#¿Por qué fallan las transacciones: razones técnicas?

Incluso transacciones correctamente formadas pueden no llegar a un bloque. Entender las razones ayuda a evitar pérdida de tiempo y gas.

Arquitectura de Transacciones en Solana

Cada transacción en Solana tiene límites estrictos y restricciones temporales:

  • Tamaño máximo: 1232 bytes (MTU de paquete de red)
  • Límite de Compute Units: 1,400,000 CU por transacción
  • Tiempo de vida: 150 slots (~60-90 segundos)
  • Validez de blockhash: Válido solo para bloques recientes

Transaction Expired: Error Más Común

Qué sucedió: La transacción contiene referencia a un blockhash reciente (identificador de bloque). Si pasaron más de 150 slots mientras esperaba en cola, la red rechaza la transacción como obsoleta.

Proceso técnico:

  • Formas transacción con blockhash del bloque N
  • Transacción espera inclusión en bloque
  • Red alcanza bloque N+150
  • Tu blockhash ya no está en lista "recent blockhashes"
  • Validadores rechazan transacción con error "Blockhash not found"

Por qué sucede:

Congestión de red: Durante mints populares de NFT o hype de nuevos tokens, red recibe millones de transacciones. Priority Fee determina el orden.

Priority Fee Baja: Si estableciste comisión mínima, validadores priorizarán transacciones con pago más alto.

Problemas de RPC: Nodos RPC públicos pueden ser lentos o perder conexión.

Solución:

  • ✅ Aumentar Priority Fee a "Medium" o "High" en configuración de billetera
  • ✅ Reintentar después de 1-2 minutos (blockhash se actualizará automáticamente)
  • ✅ Usar endpoints RPC privados (Helius, Triton) para estabilidad

Importante: Transacción expirada no deduce comisión. Tus fondos están seguros.

Account State Changed: Conflicto de Datos

Qué sucedió: Entre el momento de formación de transacción y su ejecución, el estado de cuenta cambió.

Escenarios típicos:

Escenario 1: Recarga durante limpieza

  • Escáner determinó: cuenta vacía, balance = 0
  • Formas transacción CloseAccount
  • Alguien te envía 1 token a esta cuenta
  • Transacción intenta cerrar cuenta con balance > 0
  • Error: "Account has non-zero balance"

Escenario 2: Race condition con otra transacción

  • Enviaste swap de token A en DEX
  • Simultáneamente enviaste transacción de cierre de cuenta de token A
  • Ambas transacciones intentan modificar una cuenta
  • Una pasa, segunda rechazada

Solución:

  • ✅ Re-ejecutar escaneo - datos se actualizarán
  • ✅ Usar herramientas con simulación pre-flight (verificación antes de enviar)
  • ✅ Evitar operaciones simultáneas con un token

Compute Budget Exceeded: Límite de Computación Excedido

Qué sucedió: Transacción intentó ejecutar operaciones demasiado complejas, excediendo límite de 1.4M Compute Units.

Causas:

  • Demasiadas instrucciones en paquete: Intentar cerrar 30-40 cuentas a la vez
  • Smart contracts complejos: Algunos Token-2022 con extensiones requieren más computación
  • Llamadas de programa anidadas: Programa A llama programa B, que llama C

Solución:

  • ✅ Reducir número de cuentas en paquete (cerrar 15-20 en lugar de 25-30)
  • ✅ Usar herramientas que optimizan automáticamente tamaño de paquetes
  • ✅ Agregar instrucción ComputeBudgetProgram.setComputeUnitLimit() para aumentar límite

Detalle técnico: Puedes solicitar hasta 1,400,000 CU, pero esto requiere Priority Fee proporcionalmente mayor:

Priority Fee = CU solicitadas × Precio por CU

Insufficient Lamports: Fondos Insuficientes

Qué sucedió: SOL insuficiente en balance para ejecutar operación.

Causas no obvias:

Mínimo rent-exempt: Si intentas transferir todo el SOL pero tienes cuentas vacías abiertas, billetera debe preservar mínimo para cubrir renta de todas las cuentas.

Cambio dinámico de gas: Durante congestión, Priority Fee puede crecer 10-100x. Transacción formada con cálculo de 0.000005 SOL de gas puede requerir 0.0005 SOL.

Múltiples transacciones: Enviaste 5 transacciones seguidas, cada una reserva gas. Última no pasa por falta de fondos libres.

Solución:

  • ✅ Siempre mantener mínimo 0.01-0.02 SOL en balance
  • ✅ Usar modo "Advanced" en billetera para controlar reserva de gas
  • ✅ Enviar transacciones secuencialmente, esperando confirmación

#¿Cómo funciona Token-2022 y cómo recuperar renta de él?

Token Extensions Program (Token-2022) es la evolución del SPL Token clásico, lanzado en 2023.

Diferencias Clave con SPL Token

SPL Token (clásico):

  • Program ID: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
  • Tamaño fijo: 165 bytes
  • Funcionalidad básica: transfer, mint, burn, approve

Token-2022:

  • Program ID: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
  • Tamaño variable: 165-500+ bytes (depende de extensiones)
  • Funcionalidad extendida: 16+ capacidades adicionales

Extensiones Principales

Transfer Fee Extension:

Permite al creador del token cobrar comisión en cada transferencia.

Ejemplo:

Transferir 100 tokens Comisión: 2% = 2 tokens Receptor recibe: 98 tokens Creador recibe: 2 tokens de comisión

Impacto en recuperación de renta: Cuentas con Transfer Fee ocupan más espacio → renta aumenta a ~0.0025 SOL.

Permanent Delegate:

Creador de token designa dirección que puede transferir tokens de cualquier billetera sin consentimiento del propietario.

Aplicaciones:

  • Stablecoins centralizadas (USDC puede congelar fondos de criminales)
  • Tokens de juegos (desarrollador puede confiscar en ban)

Riesgo: Creador tiene acceso backdoor a tus fondos.

Confidential Transfers:

Encriptación de balances usando pruebas de conocimiento cero.

Cómo funciona:

  • Solo balance encriptado visible públicamente
  • Remitente y receptor conocen cantidades reales
  • Validadores pueden verificar corrección sin revelación

Tamaño de cuenta: Hasta 400 bytes → renta hasta ~0.004 SOL

Non-Transferable Tokens:

Tokens que no pueden transferirse (soulbound).

Aplicaciones:

  • Certificados y diplomas
  • Logros en juegos
  • Tokens KYC (verificación de identidad)

Especificidad de recuperación de renta: Tales tokens no pueden quemarse, pero cuenta puede cerrarse si creador previó esta función.

Por Qué Herramientas Antiguas No Ven Token-2022

Razón técnica: Servicios de limpieza clásicos usan método RPC que solo devuelve tokens SPL. Enfoque correcto requiere dos consultas separadas para programas SPL y Token-2022.

Recuperación de Renta de Token-2022

Cantidades de recuperación (aproximadas):

  • Token-2022 básico: ~0.00204 SOL (como SPL)
  • Con una extensión: ~0.0025 SOL
  • Con dos extensiones: ~0.003 SOL
  • Con Confidential Transfers: ~0.004 SOL

Importante: Cantidad real depende del tamaño exacto de cuenta en bytes.

Proceso de cierre: Idéntico a tokens SPL - quemar remanentes (si hay), luego instrucción CloseAccount. Única diferencia: necesitas usar Program ID correcto al formar instrucción.

#¿Qué son las cuentas PDA y se puede recuperar renta de ellas?

Program Derived Address (PDA) - cuentas controladas por programas, no usuarios.

Qué es PDA Técnicamente

Cuenta regular:

Clave Privada → Clave Pública (dirección) Firma de transacción = tu clave privada

PDA:

Program ID + Seeds → Dirección determinística Firma de transacción = programa (vía invoke_signed)

Característica clave: PDA no tiene clave privada. Solo el programa puede firmar operaciones en su nombre.

Dónde se Usan PDAs

Protocolos de lending (Solend, MarginFi):

Cuando haces depósito:

  • Programa crea PDA para almacenar tu colateral
  • Eres el propietario pero no controlas directamente
  • Retiro solo posible a través de función withdraw() del programa

DEX (Raydium, Orca):

Órdenes abiertas almacenadas en PDAs - Order Book contiene PDA de cada orden abierta. Cancelar orden = cerrar PDA + devolver renta

Programas de staking:

Tus tokens stakeados están en PDA - programa controla período de unlock, no puedes "robar" tus propios tokens antes de vencimiento

¿Se Puede Devolver Renta de PDA?

Depende de implementación del programa.

Si programa proporcionó Close Authority para usuario:

✅ Puedes cerrar PDA y devolver renta
Ejemplos: Versiones obsoletas de Serum DEX, protocolos de lending antiguos

Si programa no proporcionó:

❌ PDA permanece abierto para siempre
Ejemplos: Algunos programas de staking crean PDAs permanentemente

Si fondos aún en uso:

❌ Cierre imposible hasta retiro
Ejemplo: No puedes cerrar PDA con préstamo activo en lending

Cómo Determinar Si Puedes Devolver Renta

Paso 1: Verificar Owner

Abrir cuenta en Solscan y verificar si Owner es programa conocido (Raydium, Orca).

Paso 2: Verificar Balance

Si balance = solo renta (sin tokens/datos), cierre puede ser posible.

Paso 3: Verificar Close Authority

Algunos explorers muestran campo Close Authority. Si es tu dirección - puedes cerrar.

Detección Automática en Herramientas de Limpieza

Servicios de calidad:

  • Escanean todas las cuentas donde eres Rent Payer
  • Filtran por programas con lógica conocida
  • Verifican balance y estado vía RPC
  • Muestran solo PDAs seguros para cerrar

Advertencia: No cierres PDAs manualmente sin entender. Puedes perder acceso a fondos en protocolo.

#¿Cómo usar Ledger y billeteras hardware para limpieza?

Las billeteras frías proporcionan máxima seguridad pero requieren pasos adicionales para operaciones de limpieza.

Por Qué Ledger Bloquea Transacciones Complejas

Limitación de pantalla: Ledger Nano S/X tiene pantalla de 128×64 píxeles. Puede mostrar dirección (parcialmente), cantidad de transferencia e información básica de transacción, pero NO detalles de 20 instrucciones CloseAccount, lista de todas las cuentas afectadas o llamadas complejas de smart contracts.

Mecanismo de protección: Si Ledger no puede mostrar detalles de transacción, la rechaza por defecto con error:

Condition of use not satisfied (0x6985)

Qué es Blind Signing

Blind Signing (Firma ciega) - modo donde permites a Ledger firmar transacciones sin mostrar detalles completos en pantalla.

Cómo habilitar:

  • Conectar Ledger a computadora
  • Abrir app Solana en dispositivo
  • Presionar ambos botones simultáneamente para entrar en Settings
  • Encontrar opción "Blind signing"
  • Cambiar a "Enabled"
  • Salir de Settings

Importante: Esta configuración está dentro de app Solana en Ledger, no en Ledger Live en computadora.

Riesgos de Blind Signing

Pérdida de verificación en dispositivo: No ves lo que estás firmando. Teóricamente, sitio malicioso podría enviar transacción transfiriendo todo el SOL al hacker y cerrando tus cuentas - y no verías esto en pantalla de Ledger.

Cómo minimizar riesgos:

  • ✅ Habilitar Blind Signing solo para operación específica
  • ✅ Usar solo servicios verificados
  • ✅ Verificar simulación de transacción en billetera Phantom/Solflare (si usas como interfaz)
  • ✅ Deshabilitar Blind Signing inmediatamente después de usar

Flujo de Trabajo Alternativo Sin Blind Signing

Método 1: Limpieza parcial

Algunas operaciones simples no requieren Blind Signing - cerrar 1-3 cuentas por transacción, tokens SPL simples sin extensiones.

Método 2: Exportar vía xpub

  • Exportar clave pública extendida de Ledger
  • Importar a billetera caliente (solo lectura)
  • Hacer limpieza en billetera caliente
  • Enviar SOL recuperado de vuelta a Ledger

Método 3: Crear billetera intermedia

  • Transferir fondos a billetera caliente temporal
  • Hacer limpieza en billetera caliente
  • Devolver fondos a Ledger

#¿Cómo recuperar renta de billeteras multisig?

Las billeteras multifirma (Squads Protocol, Goki) usan múltiples claves para autorizar transacciones.

Cómo Funciona Multisig en Solana

Estructura:

Multisig Vault (PDA) ├── Firmante 1: Alice (1/3 voto) ├── Firmante 2: Bob (1/3 voto) └── Firmante 3: Charlie (1/3 voto) Umbral: 2/3 (necesarias firmas de dos de tres)

Proceso de transacción:

  • Alice crea Propuesta: "Cerrar 50 cuentas vacías"
  • Bob revisa y Aprueba
  • Umbral alcanzado (2/3) → transacción se ejecuta automáticamente
  • Charlie puede Aprobar después (pero ya innecesario)

Por Qué Herramientas Regulares de Limpieza No Funcionan con Multisig

Problema: Servicios estándar intentan enviar transacción inmediatamente después de conectar billetera. Pero en Multisig:

  • Una firma insuficiente
  • Necesitas crear Propuesta
  • Esperar otros firmantes

Momento técnico: Multisig Vault es un PDA. Tokens almacenados no en direcciones de firmantes sino en Vault. Por eso escanear dirección de Alice mostrará 0 cuentas, aunque Vault tenga cientos.

Flujo de Trabajo para Limpieza Multisig

Paso 1: Escanear dirección de Vault

Encontrar dirección de Multisig Vault en interfaz de Squads, pegarla en escáner de limpieza (solo lectura).

Paso 2: Exportar lista de cuentas

Algunas herramientas avanzadas permiten exportar lista de cuentas de tokens para cerrar.

Paso 3: Crear Propuesta manualmente

En interfaz de Squads:

  • New Proposal → Custom Instruction
  • Program: Token Program / Token-2022 Program
  • Instruction: CloseAccount
  • Account list: pegar desde exportación
  • Create Proposal

Paso 4: Recolectar firmas

Enviar enlace de Propuesta a otros firmantes. Después de alcanzar umbral, transacción se ejecuta.

Automatización para Multisig

Desarrolladores pueden crear scripts usando Squads SDK para automatizar creación de propuestas, recolección de firmas y ejecución. Costo incluye gas para creación de Propuesta más gas de ejecución de transacción.

#¿Cómo interpretar códigos de error comunes de Solana?

Solana usa códigos de error numéricos que no siempre son claros para usuarios.

Códigos de Error Comunes Durante Limpieza

0x0 (Success): No es error. Transacción ejecutada exitosamente.

0x1 (Insufficient funds): SOL insuficiente para gas o pago de mínimo rent-exempt. Solución: Recargar balance.

0x3 (Invalid account data): Cuenta tiene estructura de datos incorrecta. Causa: Token bugueado, metadatos corruptos. Solución: Omitir esta cuenta, cerrar otras.

0x7 (Account already in use): Otra transacción modificando simultáneamente esta cuenta. Solución: Esperar 5-10 segundos, reintentar.

0xBB8 (3000 - Account not rent exempt): Intento de crear cuenta sin depósito suficiente. En contexto de limpieza: Bug de herramienta (error raro).

0x1771 (6001 - Custom program error): Error específico de programa particular. Necesitas verificar detalles en mensaje de error.

Cómo Obtener Detalles de Error

En Phantom/Solflare:

Después de transacción fallida aparece:

Transaction failed View in Explorer →

Hacer clic → abre Solscan con registro completo.

En Solscan:

  • Encontrar sección "Program Logs"
  • Buscar líneas con "Error:"
  • A menudo hay descripción legible

Ejemplo:

Program log: Error: Account has non-zero balance Program TokenkegQf... failed: custom program error: 0x10

Interpretación: 0x10 = "Non-zero balance", no se puede cerrar cuenta con tokens.

SolChekers

Our mission is to make the Solana blockchain cleaner, lighter, and more efficient for everyone by reclaiming unused rent deposits.

Built with ❤️ by Solana enthusiasts

Important

SolChekers is a non-custodial tool. We do not have access to your private keys. Use at your own risk.

Official URL verification:
solchekers.com

© 2025 SolChekers.com. Not affiliated with the Solana Foundation.