Melhores práticas para produção

O Keychain abstrai o backend de assinatura, mas operar um assinante em produção ainda é sua responsabilidade. Essas práticas se aplicam a todos os backends; consulte Escolhendo um backend para selecionar um.

Separe assinantes quentes e frios

Use um assinante operacional de baixo saldo ("quente") para transações frequentes e automatizadas, e um assinante separado de alto valor ("frio") para movimentações do tesouro. Proteja o assinante frio com custódia MPC ou um HSM em nuvem e exija políticas de aprovação antes que ele assine. Como a interface é idêntica, cada função pode usar um backend diferente sem alterar os pontos de chamada.

Rotacione chaves de forma deliberada

No Solana, a chave de assinatura é o endereço da conta, portanto, rotacionar uma chave gera um novo endereço. Planeje a rotação como uma migração: provisione uma nova chave, reatribua as autoridades relevantes (ou mova os fundos) para o novo endereço e, em seguida, desative o antigo. Use chaves distintas por ambiente para que as chaves da devnet nunca sejam reutilizadas na mainnet.

Conceda acesso com privilégio mínimo

Limite as credenciais de cada backend ao mínimo necessário para assinar. Para o AWS KMS, isso é kms:Sign, kms:DescribeKey e kms:GetPublicKey na chave específica (a verificação de disponibilidade usa as duas últimas); prefira funções IAM em vez de credenciais estáticas. Aplique o mesmo princípio às políticas do Vault e às chaves de API de carteiras gerenciadas.

Planeje a disponibilidade

Backends remotos dependem de um serviço de rede. Verifique a disponibilidade antes de depender de um assinante (isAvailable() em TypeScript, is_available() em Rust e Python, IsAvailable(ctx) em Go), repita com recuo exponencial as falhas apenas de assinatura e defina um caminho de fallback para interrupções. Não repita às cegas um backend que faz broadcast (Crossmint, modo automático nativo do Fordefi): consulte Trate broadcasts não confirmados. O Keychain aplica HTTPS nas URLs base configuradas, rejeita redirecionamentos e utiliza um tempo limite de requisição padrão.

Trate broadcasts não confirmados

O Crossmint e o modo automático nativo do Fordefi assinam e fazem o broadcast no lado do servidor, portanto uma chamada com falha não significa que nada foi registrado. Quando o provedor pode ter aceitado a transação, o Keychain informa BROADCAST_UNCONFIRMED (SignerError::BroadcastUnconfirmed em Rust). O erro traz o ID da transação do provedor quando a criação foi aceita e sempre traz a chave de idempotência sob a qual a criação foi enviada, derivada da mensagem.

  • Reconcilie com o provedor usando o ID da transação antes de fazer qualquer outra coisa.
  • Reenviar a transação byte a byte idêntica é seguro: a chave de idempotência a deduplica.
  • Reconstruir a transação (por exemplo, com um novo blockhash) gera uma nova chave e, portanto, uma nova transferência.

Proteja segredos e o transporte

  • Os backends remotos aplicam HTTPS nas URLs base configuradas e rejeitam redirecionamentos. A única exceção é o Vault, que aceita HTTP simples em loopback para que um vault server -dev local funcione.
  • Forneça chaves de API, tokens e credenciais a partir de um gerenciador de segredos ou variáveis de ambiente — nunca os codifique diretamente no código nem os envie para o controle de versão.
  • O Keychain sanitiza as respostas de erro para evitar que segredos vazem nos logs; mantenha seus próprios registros livres de credenciais brutas e material de chave.

Monitore e audite as assinaturas

Acompanhe a taxa de sucesso, a latência e a contagem de falhas das assinaturas, e configure alertas para picos — consulte as métricas em Prontidão para Produção. Ative os logs de auditoria do provedor (KMS, Vault ou custodiante) e reconcilie-os com as transações que sua aplicação envia.

Saiba o que o Keychain verifica

  • O Keychain valida a etapa de assinatura, não a sua transação: não há simulação, verificação do conteúdo da transação nem mecanismo de políticas. Aplique essas medidas na sua aplicação ou nos controles de política do provedor.
  • O modo manual nativo do Fordefi reescreve a transação (blockhash, instruções de taxa do Compute Budget) antes de assiná-la. Continue a partir da transação que ele retorna, nunca da que você enviou, e execute-o antes de qualquer outro assinante.
  • O Rust zera os buffers intermediários de chaves; Python e Go não conseguem. Com o backend Memory nessas linguagens, trate toda a memória do processo como sensível.
  • Com o Ledger, a tela do dispositivo é a única descrição confiável do que está sendo assinado. Não ative o recurso unsafe-debug nem o registro TRACE para solana_remote_wallet em produção, pois ambos registram detalhes do dispositivo e da transação.

Consulte o modelo de segurança para ter o quadro completo.

Is this page helpful?

Índice

Editar Página
© 2026 Fundação Solana. Todos os direitos reservados.