Clusters y Redes
Solana ejecuta múltiples clusters: blockchains independientes con sus propios conjuntos de validadores, hashes de génesis y economías de tokens. Elegir el cluster correcto mantiene tu desarrollo seguro y predecible.
Receta
Tarjeta de referencia rápida - lista para copiar y pegar.
# Apuntar la CLI a un cluster
solana config set --url devnet
solana config set --url https://api.mainnet-beta.solana.com
# Verificar el cluster actual
solana config get
# Iniciar un validador local Agave 4.1.1
solana-test-validator --resetCuándo usar esto:
- Para iniciar un nuevo proyecto en devnet con SOL de prueba gratuito
- Para ejecutar pruebas de integración contra un validador local
- Para desplegar un programa en mainnet-beta para producción
- Para depurar fallos de transacciones en un entorno aislado
- Para que la URL RPC coincida con el cluster donde se crearon las cuentas
Ejemplo de Trabajo
#!/bin/bash
# devnet-workflow.sh - Solana CLI 3.0.10
set -e
# 1. Configurar devnet
solana config set --url devnet
echo "Cluster: $(solana config get | grep 'RPC URL')"
# 2. Crear una billetera dev
solana-keygen new --no-bip39-passphrase -o ./dev-keypair.json --force
PUBKEY=$(solana-keygen pubkey ./dev-keypair.json)
echo "Wallet: $PUBKEY"
# 3. Financiar desde el faucet
solana airdrop 2 ./dev-keypair.json
solana balance ./dev-keypair.json
# 4. Verificar que el génesis coincide con devnet
solana genesis-hash
# génesis de devnet: EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBGimport { createSolanaRpc } from "@solana/kit";
// La URL RPC debe coincidir con el cluster donde residen tus cuentas
const devnet = createSolanaRpc("https://api.devnet.solana.com");
const mainnet = createSolanaRpc("https://api.mainnet-beta.solana.com");
const { value: version } = await devnet.getVersion().send();
console.log("Versión de Agave:", version["solana-core"]);Lo que esto demuestra:
solana config set --urlde la CLI determina dónde se envían todas las transacciones subsiguientes- Los airdrops solo funcionan en devnet/testnet, no en mainnet-beta
- El hash de génesis identifica de forma única un cluster; un RPC que no coincide significa cuentas ausentes
- Los clientes RPC de Kit son específicos del cluster; instancia uno por entorno
Análisis Profundo
Cómo Funciona
- Cada cluster tiene su propio bloque génesis, conjunto de validadores e historial de ledger.
- Las transacciones firmadas para un cluster no son válidas en otro (diferente blockhash reciente).
- Los IDs de programa pueden diferir entre clusters si se despliegan por separado.
- Los endpoints RPC públicos tienen límites de tasa; las aplicaciones de producción usan proveedores dedicados.
Clusters de un Vistazo
| Cluster | Propósito | SOL | Airdrop | Estabilidad |
|---|---|---|---|---|
| devnet | Desarrollo de aplicaciones | Prueba (sin valor) | Sí | Moderada |
| testnet | Pruebas de validador/protocolo | Prueba | Sí | Baja |
| mainnet-beta | Producción | Valor real | No | Máxima |
| localnet | solana-test-validator local | Ilimitado local | N/A | Tú lo controlas |
Opciones de Validador Local
# Ledger nuevo, puertos predeterminados
solana-test-validator --reset
# Clonar un programa de mainnet para pruebas locales
solana-test-validator --clone-upgradeable-program <PROGRAM_ID> --url mainnet-beta
# Apuntar la CLI al validador local
solana config set --url http://127.0.0.1:8899Notas de Rust
// En pruebas, usa LiteSVM 0.6.x o Surfpool 0.12.0 para clusters locales programáticos
// Prueba de Anchor con Surfpool:
// [scripts]
// test = "npx surfpool run anchor test"Trampas Comunes
- RPC incorrecto para cuentas existentes - los keypairs de devnet tienen saldo cero en mainnet. Solución: que la URL RPC coincida con el lugar donde se crearon las cuentas.
- Usar claves de mainnet en devnet - seguro, pero lo inverso es catastrófico. Solución: usa archivos de keypair separados por cluster; nunca hagas airdrop en mainnet.
- IDs de programa codificados en duro entre clusters - las direcciones desplegadas difieren por cluster. Solución: usa configuración de entorno o
declare_id!por despliegue. - Límites de tasa de RPC públicos - los airdrops de devnet y las lecturas intensivas se limitan. Solución: usa un proveedor RPC dedicado o un validador local para CI.
- Inestabilidad de Testnet - falla más a menudo que devnet. Solución: usa devnet para desarrollo de aplicaciones, testnet solo para trabajo de validador.
- Desajuste del hash de génesis en CI - imagen de validador obsoleta frente al cluster esperado. Solución: fija Agave 4.1.1 y verifica el génesis en la configuración de prueba.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
solana-test-validator | Control local completo, iteración rápida | Necesitas estado de programa de mainnet |
| Surfpool 0.12.0 | Pruebas de integración de Anchor con fixtures | Experimentos puntuales con la CLI |
| LiteSVM 0.6.x | Pruebas unitarias sin un validador completo | Probar comportamiento a nivel de red |
| Devnet | Sandbox público compartido | Pruebas de carga o tiempo de actividad garantizado |
Preguntas Frecuentes
¿Cuál es la diferencia entre devnet y testnet?
Devnet es para desarrolladores de aplicaciones. Testnet es para pruebas de validadores y protocolos. Devnet es más estable para el trabajo diario de aplicaciones.
¿Puedo usar el mismo keypair en todos los clusters?
Sí, los keypairs son agnósticos al cluster. Pero el estado de la cuenta (saldos, programas) es por cluster.
¿Cómo obtengo SOL de prueba en devnet?
solana airdrop 2Limitado a unos pocos SOL por solicitud. Usa faucets web si se te limita la tasa.
¿Qué URL RPC debo usar para mainnet?
Pública: https://api.mainnet-beta.solana.com. Las aplicaciones de producción deben usar un proveedor dedicado (Helius, Triton, QuickNode, etc.).
¿Cómo verifico a qué cluster estoy conectado?
solana genesis-hash
solana cluster-version¿Localnet persiste el estado entre reinicios?
Solo si omites --reset. Con --reset, el ledger comienza de nuevo cada vez.
¿Puedo clonar cuentas de mainnet a localnet?
Sí, con solana-test-validator --clone <PUBKEY>. Útil para probar implementaciones de programas reales.
¿Por qué fallan mis transacciones después de cambiar de cluster?
Los blockhashes recientes son específicos del cluster. Obtén un nuevo blockhash del RPC del cluster de destino.
¿El SOL de devnet tiene algún valor?
No. No tiene valor de mercado y se puede acuñar libremente a través de airdrops.
¿Qué versión de Agave se ejecuta en los clusters públicos?
Los clusters públicos siguen las versiones estables de Agave. Fija tu herramienta local a Agave 4.1.1 para que coincida con esta documentación.
¿Debería CI usar devnet o localnet?
Localnet (Surfpool o solana-test-validator) es más rápido y libre de límites de tasa. Usa devnet solo para pruebas de integración ocasionales.
¿Cómo saben los exploradores a qué cluster mostrar?
Pasa ?cluster=devnet o ?cluster=mainnet-beta en la URL. El valor predeterminado es mainnet-beta.
Relacionado
- Conceptos Básicos de Solana - primeros pasos en devnet
- Wallets y Exploradores - flujo de trabajo de devnet y faucets
- Keypairs y Direcciones - gestión de claves por cluster
Versiones de Stack: 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.