Usando um dcrwallet externo
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
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
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
É 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.