Tablas de Búsqueda de Direcciones en la Práctica
Utiliza Tablas de Búsqueda de Direcciones (ALTs) con transacciones versionadas (v0) para incluir más cuentas en una sola transacción sin exceder los límites de tamaño de paquete.
Receta
Tarjeta de receta de referencia rápida - lista para copiar y pegar.
solana address-lookup-table create
solana address-lookup-table extend <ALT_ADDRESS> <PUBKEY1> <PUBKEY2>
solana address-lookup-table freeze <ALT_ADDRESS>Cuándo recurrir a esto:
- Rutas estilo Jupiter que referencian docenas de cuentas.
- Agrupación de múltiples instrucciones con conjuntos de cuentas superpuestos.
- Reducción del tamaño serializado de la transacción para los retransmisores.
- Migración de transacciones heredadas que encuentran errores de tamaño.
Ejemplo de Trabajo
solana config set --url devnet
solana airdrop 2
# Crear tabla de búsqueda (devuelve la dirección de la tabla)
solana address-lookup-table create
ALT="<LOOKUP_TABLE_ADDRESS>"
solana address-lookup-table extend "$ALT" \
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA \
YOUR_PROGRAM_ID
# Esperar la activación de la ranura (~1 ranura) y luego usar en tx v0 desde el cliente
solana address-lookup-table get "$ALT"import { createSolanaRpc, address } from "@solana/kit";
const rpc = createSolanaRpc(process.env.RPC_URL!);
const alt = await rpc
.getAddressLookupTable(address("ALT_PUBKEY"))
.send();
console.log("addresses:", alt.value?.data.addresses.length);Lo que esto demuestra:
- ALT almacena una lista estática de pubkeys en la cadena una vez.
- Las transacciones v0 hacen referencia a las cuentas por índice en ALT más claves estáticas.
- La extensión requiere la firma de la autoridad hasta que se congela.
Análisis Profundo
Cómo Funciona
- La cuenta de tabla de búsqueda contiene un vector de pubkeys.
- El mensaje versionado comprime las claves de 32 bytes a índices de 1 byte para las entradas de ALT.
AddressLookupTableProgramgestiona la creación/extensión/desactivación/cierre.- Los clientes compilan mensajes v0 con el campo
addressTableLookupspoblado.
Ciclo de Vida de ALT
| Paso | Acción |
|---|---|
| Crear | Asignar cuenta de tabla |
| Extender | Añadir pubkeys (autoridad) |
| Activar | Esperar ~1 ranura antes de usar |
| Congelar | Inmutabilidad opcional |
| Desactivar | Período de enfriamiento antes del cierre |
Notas de TypeScript
// @solana/kit 7.0.0 soporta la construcción de transacciones versionadas
// Obtener cuentas ALT con getAddressLookupTable antes de compilarErrores Comunes
- Usar ALT antes de la ranura de activación - la transacción falla al compilar o verificar. Solución: esperar una ranura después de la extensión.
- Transacción heredada con muchas cuentas - excede el límite de paquete de 1232 bytes. Solución: migrar a v0 + ALT.
- Entradas ALT obsoletas - cuentas cerradas todavía en la tabla. Solución: extender una nueva versión de tabla; desactivar la antigua.
- Índice de búsqueda incorrecto - compila a la pubkey incorrecta. Solución: regenerar el paso de compilación del cliente a partir de la lectura de ALT en la cadena.
- Olvidar los indicadores de índice de escritura - los permisos de metadatos de la cuenta son incorrectos. Solución: marcar como escribibles/firmantes en el mensaje compilado correctamente.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Menos cuentas / fusionar ix | Programas simples | Metadatos grandes inevitables |
| Múltiples transacciones | Aceptable no atómico | Se requiere intercambio atómico |
| Atomicidad de paquetes Jito | Aterrizaje atómico multi-tx | v0 simple suficiente |
| Patrón de cuentas restantes | Metadatos dinámicos en cadena | El tamaño del cliente sigue siendo grande |
Preguntas Frecuentes
¿Cuántas direcciones por ALT?
Gran capacidad por tabla - extender en lotes; se permiten múltiples tablas por transacción dentro de los límites.
¿Costo de crear ALT?
Lamports exentos de alquiler para la cuenta de tabla proporcionales a las pubkeys almacenadas más las tarifas de transacción.
¿Quién puede extender?
Autoridad establecida en la creación - a menudo multisig del implementador.
¿Pruebas de ALT en Devnet?
Mismo flujo de trabajo - esencial antes de grandes transacciones en mainnet.
¿Relación con el documento de transacciones versionadas?
¿Pueden las billeteras firmar v0?
Las billeteras modernas soportan transacciones versionadas - probar la matriz de billeteras temprano.
¿ALT y tarifas de prioridad?
Independiente - los ahorros de tamaño permiten el aterrizaje; las tarifas todavía son necesarias bajo congestión.
¿Cerrar ALT?
Desactivar y luego cerrar después del período de enfriamiento para recuperar el alquiler.
¿ALT codificado en el programa?
Los programas no incrustan ALT - el cliente suministra la búsqueda en el mensaje de transacción.
¿Ayudantes de compilación de kit?
Usar los constructores de mensajes de transacción de kit con cuentas de tabla de búsqueda obtenidas.
Relacionado
- Transacciones Versionadas v0 - formato v0
- Tablas de Búsqueda de Direcciones (ALT) - descripción conceptual
- Ensamblaje de Transacciones - ordenamiento de ixs
- Por Qué las Transacciones Fallan en Aterrizar - las caídas por tamaño excesivo
Versiones de la Pila: Esta página fue escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, y LiteSVM 0.6.x.