---
title: "Mantenha a chave de trading e os segredos de uma aplicação fora do disco do servidor"
description: "O erpc worker guarda a chave de trading e os segredos no 1Password, no chaveiro do sistema ou em um keystore criptografado e os entrega à aplicação na memória."
canonical: "https://erpc.global/pt/doc/erpc-cli/worker-secrets/"
locale: "pt"
---

# Mantenha a chave de trading e os segredos de uma aplicação fora do disco do servidor

O `erpc worker` guarda a chave de trading e os segredos de uma aplicação no 1Password, no seu chaveiro ou em um keystore criptografado, e os entrega à aplicação na memória, nunca no disco do servidor.

Esta página descreve o ERPC CLI `v0.1.0-rc.4`, uma versão de pré-lançamento.

## Como a chave de trading chega à aplicação

Uma aplicação com uma wallet recebe a chave por um pipe quando inicia. Não há `wallet.json`, nem `.env`, nem cópia no servidor. O erpc não grava a chave sem criptografia em nenhum disco: o único arquivo em que ele a coloca é o do keystore, na sua máquina, criptografado com a sua frase-senha.

- **Onde fica guardada:** o `erpc worker key new` cria a chave no 1Password quando o `erpc login` mantém a sessão lá; caso contrário, no chaveiro; caso contrário, no keystore. O `erpc.toml` registra a referência da chave e a chave pública dela.
- **No servidor:** o agente do erpc worker mantém a chave apenas na memória. Ele impede que seja feito um dump de si mesmo e bloqueia a própria memória, e entrega a chave à aplicação por um descritor de arquivo; a aplicação a apaga depois de ler.
- **Depois de uma reinicialização,** o worker volta bloqueado: a aplicação não roda até que o `erpc worker start` envie a chave de novo. Um agente que falha ou é encerrado à força é iniciado de novo pelo systemd e volta bloqueado da mesma forma.
- **Uma atualização de pacote não reinicia um worker.** O `deploy` instrui o `needrestart` a deixar as unidades do worker em paz: no modo automático, ele as adia, e, quando pergunta em um terminal, a resposta padrão para elas é não, então uma atualização de segurança sem supervisão não reinicia a aplicação. Quando essa regra não pôde ser escrita, a implantação avisa e continua, e o worker passa a rodar sem essa proteção.

A chave de trading é indicada pelo `[wallet]` e por nada mais, e o erpc só a lê para uma pessoa em um terminal: não para uma ferramenta de IA, e não com uma conta de serviço do 1Password. Uma linha de `[secrets]` que indica a referência de `[wallet]`, ou uma conta `keychain:` ou `keystore:` terminada em `.wallet`, é recusada. No keystore, uma entrada guardada como chave não abre como segredo. No 1Password, e sob uma conta do chaveiro com outro nome, nada marca uma chave: se um `erpc.toml` sem `[wallet]` indica um desses itens em `[secrets]`, ele é lido como segredo.

## Escolher onde os valores ficam guardados

O 1Password é opcional. O `erpc worker key new` e o `erpc worker secret put` guardam o que recebem no primeiro destes locais que se aplica, a menos que `--store` indique um (`--store 1password --vault <id>`, `--store keychain`, `--store keystore`):

1. **1Password**, quando o `erpc login` mantém a sessão lá ou quando `--vault` é informado.
2. **O chaveiro do sistema operacional**, nos sistemas em que ele mantém um valor após uma reinicialização: macOS, Windows e Linux com um keyring de desktop em uma sessão com login.
3. **O keystore do erpc**, em uma máquina Linux sem esse keyring: um servidor headless, WSL, um login SSH. `--store keychain` em uma máquina assim é recusado.

No chaveiro ou no keystore, a chave existe apenas nessa máquina, sem cópia e sem sincronização, e outra máquina não consegue ler uma referência `keychain:` ou `keystore:`.

Uma máquina perdida ou apagada significa que a wallet se perdeu: mantenha pouco nela, ou use o 1Password, que toda máquina com login no cofre consegue ler. Faça login no 1Password com `erpc login --store 1password-desktop`, ou com `op signin` onde não há o aplicativo de desktop.

Uma conta de serviço do 1Password pode guardar os segredos de uma aplicação, mas o erpc não lê uma chave de trading com ela. Com o 1Password, cada leitura pode mostrar um pedido de aprovação no aplicativo, e o erpc mostra um indicador de progresso enquanto espera.

## Guardar um segredo

Os segredos, como tokens de API e chaves RPC, são guardados da mesma forma, mas chegam à aplicação como variáveis de ambiente, não por um pipe. O `erpc worker secret put <NAME>` guarda o valor, e o `[secrets]` no `erpc.toml` contém apenas a referência dele.

```bash
erpc worker secret put API_TOKEN --generate          # the bot's own API token, made for you and shown to nobody
erpc worker secret put ERPC_API_KEY --from-account   # the account's RPC key, read from your account (or SOLANA_RPC_ENDPOINT in [vars])
```

- **`--generate`** cria o valor: 32 bytes aleatórios, como 64 caracteres hexadecimais.
- **`--from-account`** guarda a primeira das chaves RPC da sua conta que o RPC compartilhado aceita. As chaves são testadas em ordem, a principal primeiro, com um `getHealth` cada, com 8 segundos para responder. Uma chave que recebe 401 ou 403 como resposta é recusada e a próxima é testada, e só é guardada uma chave que o RPC aceitou. O comando informa se é a chave principal da conta ou outra (`account_key` com `--json`).
- Nenhum dos valores é exibido, nem com `--json`. O primeiro uso do keystore, ou de um keystore bloqueado, exige uma pessoa em um terminal.
- As chaves são testadas a partir desta máquina, então uma chave limitada ao endereço do servidor é recusada aqui, embora funcione lá. Quando todas as chaves são recusadas, o `--from-account` não guarda nada, e você guarda manualmente a chave que pretende usar, digitada sem aparecer na tela ou passada por um pipe. Quando não foi possível consultar o RPC, ele não guarda nada e o `erpc.toml` fica como estava; execute o mesmo comando de novo.

Para guardar uma chave manualmente:

```bash
erpc worker secret put ERPC_API_KEY        # asks for the value, unseen
```

- `--replace` guarda um novo valor para um nome que já está definido. `erpc worker secret list` lista as configurações secretas por nome e onde cada uma está guardada.
- Uma configuração que uma linha de dados fornece (`GRPC_ENDPOINT`, `SHREDS_ENDPOINT`, `SOLANA_SEND_RPC_ENDPOINT`) nunca é um segredo: `--grpc`, `--shreds` e `--unlimited` a definem.

Uma referência em `[secrets]` ou `[wallet]` é uma destas:

| Referência | Onde está o valor |
| --- | --- |
| `op://<vault-id>/<item-id>/<field>` | 1Password, pelo id do cofre e do item |
| `keychain:<service>/<account>` | O chaveiro do sistema operacional da máquina que o guardou |
| `keystore:<service>/<account>` | O keystore do erpc na máquina que o guardou |

## O keystore

O keystore é o diretório `~/.erpc/keystore` (`keystore` dentro de `ERPC_HOME`, quando essa variável está definida). No Linux e no macOS, os diretórios dele são `0700` e os arquivos `0600`; no Windows, o erpc não define permissões próprias.

- O `master.json` contém uma chave mestra aleatória de 32 bytes, selada com uma chave que o PBKDF2-HMAC-SHA256 (600.000 iterações) deriva da sua frase-senha. Cada entrada contém um valor, selado com ChaCha20-Poly1305 com uma chave própria.
- **A frase-senha:** o primeiro `key new` ou `secret put` que usa o keystore pede que você a escolha, digitada duas vezes em um terminal, com 12 caracteres ou mais. O erpc a recebe somente desse prompt oculto, nunca de um argumento, de uma variável de ambiente ou de um pipe.
- **Desbloqueio no Linux:** depois que a frase-senha abre o keystore, o desbloqueio fica guardado no keyring persistente do kernel, na memória, até a máquina reiniciar, até o keyring ficar sem uso pelo tempo de expiração por inatividade (três dias, a menos que o sistema defina outro) ou até `erpc worker secret lock`. O `erpc worker secret unlock` pede a frase-senha com antecedência e informa até quando o desbloqueio vale. Em um shell iniciado sem um login próprio (`su` sem `-`, `sudo -E`), nenhum desbloqueio é guardado e cada comando pede a frase-senha.
- **Sem ninguém em um terminal,** um comando que precisa do keystore usa o desbloqueio quando ele existe e, caso contrário, falha, indicando `erpc worker secret unlock`. Um keystore desbloqueado entrega segredos, não a chave de trading.
- **No macOS e no Windows** (`--store keystore`), nenhum desbloqueio é guardado: cada comando que precisa do keystore pede a frase-senha uma vez e, por isso, precisa de um terminal.

### O que o keystore protege e o que não protege

- **Faça backup do diretório `keystore` e lembre-se da frase-senha.** O erpc não consegue recuperar nenhum dos dois, e, se faltar qualquer um dos dois, o que o keystore guarda está perdido.
- Quem tem os arquivos do keystore e a frase-senha tem a chave. O PBKDF2 torna cada tentativa lenta, mas não torna segura uma frase-senha fácil de adivinhar.
- Enquanto o keystore está desbloqueado, qualquer programa executado com o seu usuário pode ler a chave mestra no keyring do kernel (um programa cuja sessão não contém o seu keyring pode vinculá-lo à própria sessão) e abrir todas as entradas, inclusive a de uma chave. As regras próprias do erpc (ler a chave indicada pelo `[wallet]` só para uma pessoa em um terminal, nunca para uma ferramenta de IA; nunca abrir como segredo uma chave guardada no keystore) são o que o erpc faz; elas não obrigam outros programas executados com o seu usuário. Execute `erpc worker secret lock` quando terminar.
- Os nomes das entradas não são ocultos, e o tamanho de uma entrada mostra o comprimento do valor.
- Um arquivo alterado não abre; uma cópia mais antiga da mesma entrada colocada de volta no lugar abre.
- `erpc worker secret rm` exclui a entrada de um segredo no keystore junto com a linha dele no `erpc.toml` (a menos que outra configuração da aplicação indique a mesma entrada) e deixa no lugar um valor que esteja no 1Password ou no chaveiro. Ele não limpa o disco, e as cópias nos seus backups permanecem.
- O erpc nunca exclui nem sobrescreve a entrada de uma chave de trading. Para substituir uma chave, transfira os fundos e depois remova você mesmo o arquivo dela e o `[wallet]`.
- Uma configuração não pode se chamar `WALLET`, com qualquer combinação de maiúsculas e minúsculas, no keystore ou no chaveiro; o `--store 1password` aceita esse nome.

## Trabalhar com a chave de trading

| Comando | O que faz |
| --- | --- |
| `erpc worker key new` | Cria a chave de trading e mostra a chave pública que deve receber os fundos |
| `erpc worker key import <FILE>` | Move um arquivo de chave para o 1Password, o chaveiro ou o keystore e depois se oferece para apagar o arquivo |
| `erpc worker key show` | Mostra a chave pública da chave e onde ela está guardada |
| `erpc worker key balance` | Mostra o saldo da chave, pela configuração de RPC da própria aplicação |
| `erpc worker key send --to <ADDRESS> --sol <N>` | Assina uma transferência na memória depois do seu sim em um terminal. `--all` envia tudo, menos a taxa |

Quando o erpc termina sem saber se uma transferência foi confirmada, consulte a assinatura dela antes de enviar de novo: um segundo envio é uma segunda transferência.
