Clonando Contas da Mainnet
Semeie o solana-test-validator com dados reais de contas da mainnet para que testes locais exercitem layouts de programas de produção e estado de oráculos.
Receita
Cartão de receita de referência rápida - pronto para copiar e colar.
solana-test-validator --reset \
--url mainnet-beta \
--clone <ACCOUNT_PUBKEY> \
--clone <PROGRAM_ID>Quando usar:
- Integração com Raydium, Orca, Pyth ou outros programas implantados.
- Testar caminhos de CPI contra bytecode real sem taxas da mainnet.
- Reproduzir um bug de layout de conta da mainnet localmente.
- Validar parsers contra estruturas de mint/metadata ao vivo.
Exemplo Funcional
# Exemplo: clone o programa SPL Token e um mint USDC (verifique pubkeys atuais na documentação)
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"O que isso demonstra:
- O validador captura dados da conta na inicialização a partir do RPC em
--url. - Programas clonados executam bytecode real da mainnet localmente.
- Suas transações podem fazer CPI em programas clonados como na mainnet.
Aprofundamento
Como Funciona
- No gênesis, o validador busca via RPC de cada pubkey em
--cloneos lamports, owner, data e flag executável. - Contas grandes aumentam o tempo de inicialização e o tamanho do ledger local.
- O estado clonado é estático até suas transações locais o mutarem.
- Algumas contas dependem de outras - clone o grafo de dependências com cuidado.
Planejamento de Clone
| Tipo de conta | Clonar? | Notas |
|---|---|---|
| IDs de programa | Frequentemente sim | Necessário para CPI |
| Estado de pool/oráculo | Sim | Captura reservas realistas |
| Carteiras de usuário | Raro | Use keypairs locais |
| Sysvars | Automático | Clock, rent incluídos por padrão |
Notas bash
# Clone muitas contas a partir de um arquivo (um pubkey por linha)
solana-test-validator --reset --url mainnet-beta \
$(awk '{print "--clone "$1}' accounts.txt)Armadilhas
- Dados de clone obsoletos - reservas diferem da mainnet ao vivo minutos depois. Correção: atualize clones para testes sensíveis a preço ou use fork Surfpool.
- Contas dependentes ausentes - CPI falha com conta faltando. Correção: clone todas as contas na lista de contas da instrução.
- RPC da mainnet com rate limit - busca de clone falha na inicialização. Correção: use RPC de provider com chave de API em
--url. - Assumir que clone atualiza ao vivo - clone local não sincroniza automaticamente com a mainnet. Correção: reinicie o validador para buscar novamente.
- Clonar portfólios inteiros de tokens - inchaço desnecessário. Correção: conjunto mínimo de mints/ATAs que seu programa toca.
Alternativas
| Alternativa | Use quando | Não use quando |
|---|---|---|
| Surfpool 0.12.0 | Fork contínuo da mainnet | Testes simples só de programa |
| Fixtures construídos à mão | Testes unitários isolados pequenos | Integrações DeFi complexas |
| Espelhos devnet | Staging compartilhado da equipe | Versões de programa específicas da mainnet |
| Injeção de conta LiteSVM | Testes unitários Rust rápidos | Caminhos completos de cliente RPC |
FAQs
O clone puxa bytecode do programa?
Sim para contas executáveis - o ELF é armazenado como um deploy.
Posso clonar PDAs?
Sim se a conta PDA existir na mainnet no momento da busca - derive o endereço e verifique com solana account.
Como encontro contas para clonar?
Inspecione transações da mainnet em um explorer - copie todas as contas que sua instrução toca.
CPI para programas não clonados funciona?
Apenas se o programa for builtin nativo ou você clonar/implantar localmente.
O clone custa taxas da mainnet?
Não - busca RPC somente leitura; você paga aluguel local apenas se transações redimensionarem contas.
Posso clonar da devnet?
Sim - --url devnet para programas publicados na devnet.
Quão grande pode ser o dado clonado?
Contas muito grandes tornam a inicialização lenta - prefira Surfpool para cenários pesados de fork.
Clones incluem saldos de token?
Sim - lamports e dados da conta de token copiam exatamente no snapshot da busca.
Como depuro falhas de clone?
Leia logs de inicialização do validador para erros RPC; verifique se o pubkey existe no cluster de origem.
O CI deve clonar a mainnet?
Faça cache de diretórios de ledger ou use conjuntos mínimos de fixture para manter o CI rápido e confiável.
Relacionado
- solana-test-validator - flags de clone
- Surfpool - fluxo de fork
- Loading Programs & Fixtures - semeadura complementar
- DeFi integrations - alvos comuns de CPI
Versões da stack: Esta página foi 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 e LiteSVM 0.6.x.