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. No AWS KMS, isso significa kms:Sign, kms:DescribeKey e kms:GetPublicKey na chave específica (a verificação de disponibilidade usa as duas últimas); prefira funções do IAM a credenciais estáticas. Aplique o mesmo princípio às políticas do Vault e às chaves de API de carteiras gerenciadas.

Planeje a disponibilidade

Os backends remotos dependem de um serviço de rede. Verifique a disponibilidade antes de confiar em um assinante (isAvailable() em TypeScript, is_available() em Rust e Python, IsAvailable(ctx) em Go), tente novamente as falhas de backends que apenas assinam usando backoff e defina um caminho alternativo para indisponibilidades. Não repita às cegas uma tentativa em um backend que transmite (Crossmint, modo automático nativo do Fordefi): veja Lidar com transmissões não confirmadas. O Keychain exige HTTPS nas URLs base configuradas, rejeita redirecionamentos e aplica um tempo limite padrão de requisição.

Lidar com transmissões não confirmadas

O Crossmint e o modo automático nativo do Fordefi assinam e transmitem no lado do servidor, portanto, uma chamada com falha não significa que nada foi processado. Quando o provedor pode ter aceitado a transação, o Keychain reporta 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 com 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 idêntica byte a byte é seguro: a chave de idempotência a deduplica.
  • Reconstruir a transação (um novo blockhash, por exemplo) produz uma nova chave e, portanto, uma nova transferência.

Proteja segredos e o transporte

  • Os backends remotos exigem 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, nem verificação do conteúdo da transação, nem mecanismo de políticas. Aplique essas verificações 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 log 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?

© 2026 Fundação Solana. Todos os direitos reservados.