Fluxo de Trabalho Localnet vs Devnet
Um fluxo passo a passo para escolher localnet (solana-test-validator), devnet, Surfpool ou mainnet para uma tarefa de desenvolvimento.
Como Usar Este Fluxo
- Comece no Passo 1 para cada nova feature ou plano de teste.
- Registre o cluster escolhido na descrição do PR e no bloco provider de
Anchor.toml. - Reavalie quando o escopo de integração mudar (ex.: adicionar CPI da mainnet).
- Prefira localnet para CI; devnet para demos compartilhadas, a menos que esta árvore diga o contrário.
Passo 1: Você precisa de estado realista da mainnet?
Se sim - reservas de pool ao vivo, preços de oráculo ou versões de programa de produção - vá ao Passo 2. Se não - você controla todas as contas e programas - vá ao Passo 5.
Passo 2: Um conjunto pequeno de --clone é suficiente?
Se sim - clone pubkeys específicos no solana-test-validator - use localnet com clones (Cloning Mainnet Accounts).
Se não - grafo DeFi amplo ou refresh frequente de estado necessário - vá ao Passo 3.
Passo 3: Você precisa de simulação de fork persistente?
Se sim - use Surfpool 0.12.0 para loops de simulação de fork da mainnet (Surfpool). Se não - vá ao Passo 4.
Passo 4: Você pode testar na devnet com contrapartes implantadas?
Se sim - use devnet com programas públicos e financiamento via faucet. Se não - volte ao Passo 2 e expanda a lista de clone ou adote Surfpool.
Passo 5: O trabalho é teste unitário/integração só de programa?
Se sim - use localnet com anchor test e fixtures (Loading Programs & Fixtures).
Se não - demos de carteira ou compartilhamento entre equipes necessário - vá ao Passo 6.
Passo 6: Colegas precisam do mesmo ID de programa implantado entre laptops?
Se sim - deploy na devnet com ID de programa documentado no README. Se não - cada engenheiro usa deploy em localnet com IDs locais ou arquivos de keypair sincronizados.
Passo 7: Confiabilidade de CI é a preocupação principal?
Se sim - localnet no GitHub Actions com --reset e fixtures commitados - evite limites de taxa da devnet.
Se não - job de smoke opcional noturno na devnet é aceitável.
Passo 8: Você está testando landing de transação sob congestionamento?
Se sim - devnet é sinal fraco; use devnet + priority fees para verificações básicas, depois sondas pequenas na mainnet com SOL real (Setting Priority Fees). Se não - permaneça na localnet/devnet dos passos anteriores.
Passo 9: Você precisa de demos públicas de carteira (Phantom, etc.)?
Se sim - devnet com URL de RPC estável e carteira de demo financiada.
Se não - localnet funciona com wallet adapters apontando para localhost:8899.
Passo 10: Usuários gastarão dinheiro real neste teste?
Se sim - pare - use mainnet com quantias mínimas e confirmação finalized apenas. Se não - nunca use mainnet para esta tarefa; retorne ao caminho localnet/devnet escolhido.
Passo 11: Documente a decisão
Registre URL do cluster, IDs de programa, versões de fixture e pins da toolchain (Agave 4.1.1) no PR para reprodutibilidade.
FAQs
Por que não usar sempre devnet?
Limites de taxa, estado compartilhado instável e iteração mais lenta prejudicam o desenvolvimento diário de programas - localnet é mais rápida e determinística.
Por que não usar sempre localnet?
Falta efeitos de rede ao vivo, validadores peer e congestionamento realista - sondas devnet/mainnet ainda importam antes do lançamento.
Onde o LiteSVM se encaixa?
Abaixo deste fluxo para testes unitários Rust - nenhum cluster RPC necessário (LiteSVM).
Posso trocar de cluster no meio da feature?
Sim - comece local, evolua para devnet em demos de carteira, depois sondas na mainnet - atualize solana config e variáveis de ambiente a cada vez.
Qual URL de RPC para Phantom local?
http://127.0.0.1:8899 com RPC customizado na carteira - nem todas as carteiras suportam localhost bem; devnet pode ser mais fácil para demos.
Relacionado
- Local Dev Basics - intro ao loop local
- solana-test-validator - como fazer localnet
- Surfpool - opção de fork
- RPC Providers - qualidade de RPC devnet/mainnet
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.