Usando um dcrwallet externo

5 minutos de leitura

1. Introdução

Usar um dcrwallet em outro dispositivo ou no mesmo dispositivo conectado a um Decrediton é útil para:

a) um usuário que pretende criar uma carteira apenas para compra de novos tickets PoS em:

  • um dispositivo offline que será usado uma vez por semana ou a cada duas semanas;
  • um dispositivo online com acesso lógico e físico muito restrito com o ticket auto buyer ligado;

b) um usuário que pretende manter uma carteira em um dispositivo separado por questões de segurança;

c) um usuário que pretende usar o Decrediton a maior parte do tempo mas às vezes precisa de comandos avançados que só estão disponíveis via dcrctl;

d) por qualquer motivo de compatibilidade ou teste precisa executar um dcrwallet diferente do que vem no pacote do Decrediton.

2. Arquitetura

Figura 1 - Estrutura com dcrd compartilhado na rede local e dcrwallet executado em um Raspberry Pi
Figura 1 - Estrutura com dcrd compartilhado na rede local e dcrwallet executado em um Raspberry Pi

Até o momento não há Decrediton para plataforma ARM ou ARM64.

3. Configuração

Os passos a seguir foram executados em um Debian 9 64-bit.

Pré-requisito

É necessário ter o dcrd instalado separadamente no dispositivo local ou em outro dispositivo. Também é necessário instalar o dcrwallet em outro dispositivo ou em outro local no mesmo dispositivo. Saiba mais em Instalando o dcrd.

Se já possui o Decrediton instalado, antes de começar faça backup da pasta ~/.config/decrediton e certifique-se de ter a seed da carteira anotada em local seguro.

Se ainda não instalou o Decrediton, faça antes a verificação da assinatura digital. Saiba mais sobra a instalação em Instalação do Decrediton.

3.1. Configuração do dcrwallet

No arquivo dcrwallet.conf, configure o endereço IP do servidor dcrd:

rpcconnect=[$DCRD_IP ou localhost:9109]
ou
rpcconnect=[$DCRD_IP ou localhost:19109]

Indique as mesmas credenciais configuradas no dcrd.conf:

username=[como em 'username' no dcrd.conf]
password=[como em 'password' no dcrd.conf]

Para criar a carteira não é necessário se conectar ao dcrd:

$ ./dcrwallet --testnet --create

Se quiser gerenciar a mesma carteira alternando entre dcrwallet e Decrediton, pode fazer uma cópia sempre que for altenar o aplicativo ou fazer um link simbólico, que redirecione para o arquivo. Usar a mesma seed nas duas carteiras pode trazer problemas de sincronia. Saiba mais em Uma seed, uma carteira.

Use os comandos a seguir para copiar a carteira criada no Decrediton para o diretório do dcrwallet ou criar um link simbólico. Troque a ordem dos parâmetros para ter o efeito inverso. Para Mainnet apenas altere os diretórios testnet2 para mainnet.

$ cp -p $HOME/.config/decrediton/testnet2/wallet.db $HOME/.dcrwallet/testnet2/
ou
$ ln -s $HOME/.config/decrediton/testnet2/wallet.db $HOME/.dcrwallet/testnet2/

Execute o dcrd no outro dispositivo. A opção rpclisten=0.0.0.0 faz com que o dcrd escute em todas as interfaces de rede por conexões vindas do dcrwallet e do dcrctl nas portas 9109 ou 19101, para Mainnet ou Testnet, respectivamente.

$ ./dcrd --testnet -b /opt/blockchain/dcrd_data --rpclisten=0.0.0.0

Conecte o dcrwallet no dcrd. A opção rpclisten=0.0.0.0 faz com que o dcrwallet escute em todas as interfaces de rede por conexões vindas do dcrctl nas portas 9110 ou 19110, para Mainnet ou Testnet, respectivamente. As opções -c, -u e -P não são necessárias se os parâmetros foram configurados no dcrwallet.conf como mostrado anteriormente. A opção --cafile só é necessária se o dcrd está sendo executado em um dispositivo diferente do dcrwallet.

$ ./dcrwallet --testnet --rpclisten=0.0.0.0 -c $DCRD_IP -u $DCRD_USER -P $DCRD_PASS --cafile $DCRD_CERT_FILE

O dcrwallet sincronizará as informações da blockchain com a carteira e estará pronto para uso quando emitir a mensagem:

[INF] SYNC: Blockchain sync completed, wallet ready for general usage.

3.2. Configuração do dcrctl

Para conectar um dcrctl a um dcrwallet remoto será necessário copiar o certificado digital do RPC Server, que nesse caso é o dcrwallet, para uma pasta acessível ao dcrctl.

$ ./dcrctl -w $DCRW_IP -u $DCRW_USER -P $DCRW_PASS -c $DCRW_CERT_FILE --wallet [comando]
ou
$ ./dcrctl --testnet -w $DCRW_IP -u $DCRW_USER -P $DCRW_PASS -c $DCRW_CERT_FILE --wallet [comando]

Para gerenciar o dcrd, copie o certificado digital do dcrd.

$ ./dcrctl -s $DCRD_IP -u $DCRD_USER -P $DCRD_PASS -c $DCRD_CERT_FILE [comando]
ou
$ ./dcrctl --testnet -s $DCRD_IP -u $DCRD_USER -P $DCRD_PASS -c $DCRD_CERT_FILE [comando]

Saiba mais em Certificados digitais de conexões RPC.

3.3. Configuração do Decrediton

A execução do Decrediton inicia um dcrd e um dcrwallet internos. É necessário configurar o Decrediton, através do arquivo ~/.config/decrediton/config.json, para que não sejam mais iniciados.

Para usar um dcrwallet externo veja a instalação dos binários no artigo Compartilhando o dcrd. A configuração do dcrwallet externo requer também o parâmetro wallet_skip_start e a inclusão do parâmetro wallet_start_advanced.

A configuração a seguir fará com que o Decrediton não inicie dcrd e dcrwallet. Não faria muito sentido fazer o Decrediton iniciar apenas o dcrd, e usar um dcrwallet externo configurado para usar conectar de volta no dcrd do Decrediton.

"daemon_skip_start": true,
"daemon_start_advanced": true,
"wallet_skip_start": true,
"wallet_start_advanced": true

No parâmetro wallet_rpc_host indique o endereço IP de um dispositivo que executará o dcrwallet ou 127.0.0.1 caso uma instalação independente do dcrwallet seja usada. O Decrediton usa uma porta default para a wallet que é diferente da porta default usada pelo dcrwallet.

"wallet_port_testnet": 19110,
"wallet_port": 9110,
"wallet_rpc_host": [$DCRW_IP ou 127.0.0.1],
"rpc_user": [como em 'username' no dcrwallet.conf],
"rpc_pass": [como em 'password' no dcrwallet.conf],

aaa

"remote_credentials": {
   rpc_user: [usuário no servidor dcrd (dcrd.conf)]
   rpc_password: [senha no servidor dcrd (dcrd.conf)]
   rpc_cert: [certificado gerado no servidor dcrd]
   rpc_host: [IP do servidor dcrd ou 127.0.0.1]
   rpc_port: 9109 [ou 19109 para a Testnet]
}

Salve o arquivo e reinicie o Decrediton. Use a opção -d para o modo debug.

$ ./decrediton

3.3.1. dcrd como um processo separado

O Decrediton iniciará com a tela a seguir, que mostra a segunda guia, “Different Local Daemon Location”, na qual o Decrediton espera que seja indicado um diretório local onde está instalado o dcrd, no mesmo dispositivo. Assim não será necessário aguardar a inicialização do dcrd sempre que o Decrediton for iniciado. É útil também para quem pretende usar o dcrwallet no mesmo dispositivo.

Figura 2 - Tela para configuração do diretório do dcrd no mesmo dispositivo
Figura 2 - Tela para configuração do diretório do dcrd no mesmo dispositivo

3.3.2. dcrd executado remotamente

Para indicar ao Decrediton que o dcrd está sendo executado em outro dispositivo use a primeira guia, “Remote Daemon”, conforme a figura a seguir.

Figura 3 - Tela para informar o dispositivo de rede que executa o dcrd
Figura 3 - Tela para informar o dispositivo de rede que executa o dcrd

É possível inserir as configurações de conexão ao dcrd remoto no arquivo config.json. De qualquer forma, o usuário poderá alterá-las na inicialização do Decrediton:

"remote_credentials": {
   rpc_user: [usuário no servidor dcrd (dcrd.conf)]
   rpc_password: [senha no servidor dcrd (dcrd.conf)]
   rpc_cert: [certificado gerado no servidor dcrd]
   rpc_host: [IP do servidor dcrd ou 127.0.0.1]
   rpc_port: 9109 [ou 19109 para a Testnet]
}

Selecione o botão azul “Connect to Remote”. O Decrediton deve iniciar normalmente.