Clonar Cuentas de Mainnet
Inicializa solana-test-validator con datos reales de cuentas de mainnet para que las pruebas locales ejerciten los layouts de programas de producción y el estado de los oráculos.
Receta
Tarjeta de receta de referencia rápida - lista para copiar y pegar.
solana-test-validator --reset \
--url mainnet-beta \
--clone <PUBKEY_DE_CUENTA> \
--clone <ID_DE_PROGRAMA>Cuándo usar esto:
- Integrando con Raydium, Orca, Pyth u otros programas desplegados.
- Probando rutas de CPI contra bytecode real sin tarifas de mainnet.
- Reproduciendo un error de layout de cuenta de mainnet localmente.
- Validando parsers contra estructuras de mint/metadatos en vivo.
Ejemplo de Trabajo
# Ejemplo: clonar el programa SPL Token y un mint de USDC (verificar pubkeys actuales en la documentación)
TOKEN_PROGRAM=TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
USDC_MINT=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
solana-test-validator --reset \
--url mainnet-beta \
--clone "$TOKEN_PROGRAM" \
--clone "$USDC_MINT"
solana config set --url http://127.0.0.1:8899
solana account "$USDC_MINT"Lo que esto demuestra:
- El validador captura instantáneamente los datos de la cuenta al inicio desde el RPC de
--url. - Los programas clonados ejecutan bytecode real de mainnet localmente.
- Tus transacciones pueden hacer CPI a programas clonados como en mainnet.
Análisis Profundo
Cómo Funciona
- En el génesis, el validador obtiene vía RPC los lamports, propietario, datos y el flag de ejecutable de cada pubkey de
--clone. - Las cuentas grandes aumentan el tiempo de inicio y el tamaño del ledger local.
- El estado clonado es estático hasta que tus transacciones locales lo mutan.
- Algunas cuentas dependen de otras - clona el grafo de dependencias cuidadosamente.
Planificación de Clonación
| Tipo de cuenta | ¿Clonar? | Notas |
|---|---|---|
| IDs de Programa | A menudo sí | Requerido para CPI |
| Estado de pool/oráculo | Sí | Captura reservas realistas |
| Carteras de usuario | Raro | Usa keypairs locales en su lugar |
| Sysvars | Automático | Clock, rent incluidos por defecto |
Notas de bash
# Clonar muchas cuentas desde un archivo (una pubkey por línea)
solana-test-validator --reset --url mainnet-beta \
$(awk '{print "--clone "$1}' accounts.txt)Errores Comunes
- Datos de clonación obsoletos - las reservas difieren de mainnet en vivo minutos después. Solución: actualiza las clones para pruebas sensibles al precio o usa el fork de Surfpool.
- Cuentas dependientes faltantes - la CPI falla con cuenta faltante. Solución: clona todas las cuentas en la lista de cuentas de la instrucción.
- RPC de mainnet con límite de tasa - la clonación falla al inicio. Solución: usa el RPC del proveedor con clave API en
--url. - Asumir que la clonación se actualiza en vivo - la clonación local no se sincroniza automáticamente con mainnet. Solución: reinicia el validador para volver a obtener los datos.
- Clonar carteras de tokens completas - hinchazón innecesaria. Solución: conjunto mínimo de mnts/ATAs que tu programa toca.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Surfpool 0.12.0 | Fork continuo de mainnet | Pruebas simples solo de programas |
| Fixtures construidos a mano | Pruebas unitarias aisladas pequeñas | Integraciones complejas de DeFi |
| Espejos de devnet | Staging compartido del equipo | Versiones de programas específicas de Mainnet |
| Inyección de cuentas LiteSVM | Pruebas unitarias rápidas de Rust | Rutas completas del cliente RPC |
Preguntas Frecuentes
¿La clonación extrae el bytecode del programa?
Sí, para cuentas ejecutables - el ELF se almacena como un despliegue.
¿Puedo clonar PDAs?
Sí, si la cuenta PDA existe en mainnet en el momento de la obtención - deriva la dirección y verifica con solana account.
¿Cómo encuentro cuentas para clonar?
Inspecciona transacciones de mainnet en un explorador - copia todas las cuentas que tu instrucción toca.
¿Funcionará la CPI a programas no clonados?
Solo si el programa es un nativo incorporado o si lo clonas/despliegas localmente.
¿La clonación cuesta tarifas de mainnet?
No - obtención de RPC de solo lectura; pagas alquiler local solo si las transacciones redimensionan las cuentas.
¿Puedo clonar desde devnet en su lugar?
Sí - --url devnet para programas publicados en devnet.
¿Qué tan grandes pueden ser los datos clonados?
Las cuentas muy grandes ralentizan el inicio - prefiere Surfpool para escenarios de fork pesados.
¿Las clones incluyen saldos de tokens?
Sí - los lamports de la cuenta de token y los datos se copian exactamente en la instantánea de obtención.
¿Cómo depuro fallos de clonación?
Lee los logs de inicio del validador para errores de RPC; verifica que la pubkey exista en el clúster de origen.
¿Debería CI clonar mainnet?
Caché de directorios de ledger o usa conjuntos mínimos de fixtures para mantener CI rápido y confiable.
Relacionado
- solana-test-validator - flags de clonación
- Surfpool - flujo de fork
- Cargar Programas y Fixtures - inicialización complementaria
- Integraciones DeFi - objetivos comunes de CPI
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.