Práticas recomendadas de Python para Solana
Regras para serviços Python de nível de produção conversando com o RPC do Agave 4.1.1: matemática correta, chaves seguras, envios resilientes e falhas observáveis.
Como usar esta lista
- Aplique a todos os trabalhos de bot, backend e ETL antes da ativação da mainnet.
- Combine com revisão de código com foco em assinatura, taxas e lógica de nova tentativa.
- Revisite quando o comportamento do provedor de RPC, do Anchor IDL ou do mercado de taxas mudar.
A - Segurança e Chaves
- Nunca confirme pares de chaves ou chaves de API. Use env vars, gerenciadores de segredos ou assinantes apoiados por HSM.
- Isole carteiras quentes por estratégia com limites de gastos. Limita o raio de explosão em caso de bug ou vazamento de chave.
- Execute bots em contas de serviço dedicadas. Não em laptops de desenvolvedores em produção.
- Validar pubkeys antes de construir instruções.
Pubkey.from_stringcaptura entradas malformadas antecipadamente. - Redigir segredos dos logs. Retirar material de chave e chaves de API do provedor de rastreamentos de erros.
B - RPC e dados
- Use RPC privado com SLA para bots da rede principal. Limite de taxa e atraso de endpoints públicos.
- Definir compromisso explicitamente por chamada.
confirmedpara negociação;finalizedpara contabilidade. - Aceleração e recuo em 429/5xx. O jitter evita rebanhos trovejantes entre réplicas.
- Evite
getProgramAccountsnão filtrado. Use filtros memcmp ou um indexador. - Cache de dados imutáveis da conta. Decimais e IDs de programa do Mint raramente mudam.
##C - Transações
- Simule antes de cada envio da mainnet. Leia os logs em caso de falha - não tente novamente às cegas.
- Atualizar blockhash em cada nova tentativa. Blockhashes expirados garantem falha.
- Defina explicitamente o limite e o preço da unidade de computação. Não confie em padrões durante o congestionamento.
- Use lamports inteiros de ponta a ponta. Não há flutuações nos cálculos de quantidade.
- Confirme transações com tempos limite. Rastreie assinaturas travadas e alerte os operadores.
D - AnchorPy e IDL
- Fixar IDL JSON no hash do programa implantado. Gerar novamente nas atualizações do Anchor 0.32.1.
- Configurações separadas por cluster. Os IDs dos programas Devnet e mainnet são diferentes.
- Use AsyncClient em todo o código assíncrono. Sem bloqueio de RPC em loops de eventos.
##E - Operações
- Registro estruturado com assinatura, slot e taxa. Permite correlação de incidentes.
- Métricas de exportação: taxa de sucesso de envio, motivos de falha do sim, latência de RPC. Os painéis superam o grep.
- Dependências de pinos de versão em
requirements.txtou Poetry lock. Implantações reproduzíveis. - Teste em devnet ou fork do Surfpool 0.12.0 antes da mainnet. Valide metas de conta de forma barata.
Perguntas frequentes
Taxa de sucesso de envio, saldo da carteira, taxa de erro RPC, latência de confirmação p95.
Primário + substituto; exame de saúde e interrupção do circuito entre eles.
systemd, Kubernetes ou supervisor com limites de reinicialização - não apenas tmux no prod.
Funções puras de teste unitário; teste de integração contra validador local com par de chaves financiado.
Execute pip audit em CI; atualizações de soldas/solana-py podem alterar a serialização.
Prefira assíncio; se for multiprocessamento, nunca bifurque depois de carregar os pares de chaves na memória.
Rastrear assinaturas enviadas; a desduplicação é acionada em novas tentativas de webhook.
Defina a retenção de log para assinaturas e valores por política.
Quando a criação de perfil mostra que a sobrecarga do Python domina - não preventivamente.
Compartilhe IDL e nomenclatura de ambiente com o frontend @solana/kit 7.0.0 para menos bugs de desvio.
Relacionado
- Python for Solana Basics - introdução da seção
- Construindo transações em Python - padrões tx
- Trading & Bots - arquitetura de automação
- Práticas recomendadas para taxas prioritárias - txs de destino> Versões 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.